import sys

from collections import Counter

def main():

    input = sys.stdin.readline

    N = int(eval(input()))

    S = input().rstrip()



    C = Counter(S)

    ans = Mint(1)

    for a in list(C.values()):

        ans *= a+1

    print((ans - 1))



class Mint:

    def __init__(self, value=0, mod=10**9+7):

        self.value = ((value % mod) + mod) % mod

        self.mod = mod



    @staticmethod

    def get_value(x): return x.value if isinstance(x, Mint) else x



    def inverse(self):

        a, b = self.value, self.mod

        u, v = 1, 0

        while b:

            t = a // b

            b, a = a - t * b, b

            v, u = u - t * v, v

        return (u + self.mod) % self.mod



    def __repr__(self): return str(self.value)

    def __eq__(self, other): return self.value == other.val

    def __neg__(self): return Mint(-self.value, self.mod)

    def __hash__(self): return hash(self.value)

    def __bool__(self): return self.value != 0



    def __iadd__(self, other):

        self.value = (self.value + Mint.get_value(other)) % self.mod

        return self

    def __add__(self, other):

        new_obj = Mint(self.value, self.mod)

        new_obj += other

        return new_obj

    __radd__ = __add__



    def __isub__(self, other):

        self.value = (self.value - Mint.get_value(other) + self.mod) % self.mod

        return self

    def __sub__(self, other):

        new_obj = Mint(self.value, self.mod)

        new_obj -= other

        return new_obj

    def __rsub__(self, other):

        new_obj = Mint(Mint.get_value(other), self.mod)

        new_obj -= self

        return new_obj



    def __imul__(self, other):

        self.value = self.value * Mint.get_value(other) % self.mod

        return self

    def __mul__(self, other):

        new_obj = Mint(self.value, self.mod)

        new_obj *= other

        return new_obj

    __rmul__ = __mul__



    def __ifloordiv__(self, other):

        other = other if isinstance(other, Mint) else Mint(other, self.mod)

        self *= other.inverse

        return self

    def __floordiv__(self, other):

        new_obj = Mint(self.value, self.mod)

        new_obj //= other

        return new_obj

    def __rfloordiv__(self, other):

        new_obj = Mint(Mint.get_value(other), self.mod)

        new_obj //= self

        return new_obj



if __name__ == '__main__':

    main()



N=int(eval(input()))

S=eval(input())



MOD = 10**9+7

class Mint:

    def __init__(self, value=0):

        self.value = value % MOD

        if self.value < 0: self.value += MOD



    @staticmethod

    def get_value(x): return x.value if isinstance(x, Mint) else x



    def inverse(self):

        a, b = self.value, MOD

        u, v = 1, 0

        while b:

            t = a // b

            b, a = a - t * b, b

            v, u = u - t * v, v

        if u < 0: u += MOD

        return u



    def __repr__(self): return str(self.value)

    def __eq__(self, other): return self.value == other.value

    def __neg__(self): return Mint(-self.value)

    def __hash__(self): return hash(self.value)

    def __bool__(self): return self.value != 0



    def __iadd__(self, other):

        self.value += Mint.get_value(other)

        if self.value >= MOD: self.value -= MOD

        return self

    def __add__(self, other):

        new_obj = Mint(self.value)

        new_obj += other

        return new_obj

    __radd__ = __add__



    def __isub__(self, other):

        self.value -= Mint.get_value(other)

        if self.value < 0: self.value += MOD

        return self

    def __sub__(self, other):

        new_obj = Mint(self.value)

        new_obj -= other

        return new_obj

    def __rsub__(self, other):

        new_obj = Mint(Mint.get_value(other))

        new_obj -= self

        return new_obj



    def __imul__(self, other):

        self.value = self.value * Mint.get_value(other) % MOD

        return self

    def __mul__(self, other):

        new_obj = Mint(self.value)

        new_obj *= other

        return new_obj

    __rmul__ = __mul__



    def __ifloordiv__(self, other):

        other = other if isinstance(other, Mint) else Mint(other)

        self *= other.inverse()

        return self

    def __floordiv__(self, other):

        new_obj = Mint(self.value)

        new_obj //= other

        return new_obj

    def __rfloordiv__(self, other):

        new_obj = Mint(Mint.get_value(other))

        new_obj //= self

        return new_obj



from collections import Counter

C = Counter(S)

ans = Mint(1)

for c in list(C.values()):

    ans *= c + 1

print((ans - 1))

import sys
from collections import Counter


def main():
    input = sys.stdin.readline
    N = int(eval(input()))
    S = input().rstrip()
    C = Counter(S)
    ans = Mint(1)
    for a in list(C.values()):
        ans *= a + 1
    print((ans - 1))


class Mint:
    def __init__(self, value=0, mod=10**9 + 7):
        self.value = ((value % mod) + mod) % mod
        self.mod = mod

    @staticmethod
    def get_value(x):
        return x.value if isinstance(x, Mint) else x

    def inverse(self):
        a, b = self.value, self.mod
        u, v = 1, 0
        while b:
            t = a // b
            b, a = a - t * b, b
            v, u = u - t * v, v
        return (u + self.mod) % self.mod

    def __repr__(self):
        return str(self.value)

    def __eq__(self, other):
        return self.value == other.val

    def __neg__(self):
        return Mint(-self.value, self.mod)

    def __hash__(self):
        return hash(self.value)

    def __bool__(self):
        return self.value != 0

    def __iadd__(self, other):
        self.value = (self.value + Mint.get_value(other)) % self.mod
        return self

    def __add__(self, other):
        new_obj = Mint(self.value, self.mod)
        new_obj += other
        return new_obj

    __radd__ = __add__

    def __isub__(self, other):
        self.value = (self.value - Mint.get_value(other) + self.mod) % self.mod
        return self

    def __sub__(self, other):
        new_obj = Mint(self.value, self.mod)
        new_obj -= other
        return new_obj

    def __rsub__(self, other):
        new_obj = Mint(Mint.get_value(other), self.mod)
        new_obj -= self
        return new_obj

    def __imul__(self, other):
        self.value = self.value * Mint.get_value(other) % self.mod
        return self

    def __mul__(self, other):
        new_obj = Mint(self.value, self.mod)
        new_obj *= other
        return new_obj

    __rmul__ = __mul__

    def __ifloordiv__(self, other):
        other = other if isinstance(other, Mint) else Mint(other, self.mod)
        self *= other.inverse
        return self

    def __floordiv__(self, other):
        new_obj = Mint(self.value, self.mod)
        new_obj //= other
        return new_obj

    def __rfloordiv__(self, other):
        new_obj = Mint(Mint.get_value(other), self.mod)
        new_obj //= self
        return new_obj


if __name__ == "__main__":
    main()

N = int(eval(input()))
S = eval(input())
MOD = 10**9 + 7


class Mint:
    def __init__(self, value=0):
        self.value = value % MOD
        if self.value < 0:
            self.value += MOD

    @staticmethod
    def get_value(x):
        return x.value if isinstance(x, Mint) else x

    def inverse(self):
        a, b = self.value, MOD
        u, v = 1, 0
        while b:
            t = a // b
            b, a = a - t * b, b
            v, u = u - t * v, v
        if u < 0:
            u += MOD
        return u

    def __repr__(self):
        return str(self.value)

    def __eq__(self, other):
        return self.value == other.value

    def __neg__(self):
        return Mint(-self.value)

    def __hash__(self):
        return hash(self.value)

    def __bool__(self):
        return self.value != 0

    def __iadd__(self, other):
        self.value += Mint.get_value(other)
        if self.value >= MOD:
            self.value -= MOD
        return self

    def __add__(self, other):
        new_obj = Mint(self.value)
        new_obj += other
        return new_obj

    __radd__ = __add__

    def __isub__(self, other):
        self.value -= Mint.get_value(other)
        if self.value < 0:
            self.value += MOD
        return self

    def __sub__(self, other):
        new_obj = Mint(self.value)
        new_obj -= other
        return new_obj

    def __rsub__(self, other):
        new_obj = Mint(Mint.get_value(other))
        new_obj -= self
        return new_obj

    def __imul__(self, other):
        self.value = self.value * Mint.get_value(other) % MOD
        return self

    def __mul__(self, other):
        new_obj = Mint(self.value)
        new_obj *= other
        return new_obj

    __rmul__ = __mul__

    def __ifloordiv__(self, other):
        other = other if isinstance(other, Mint) else Mint(other)
        self *= other.inverse()
        return self

    def __floordiv__(self, other):
        new_obj = Mint(self.value)
        new_obj //= other
        return new_obj

    def __rfloordiv__(self, other):
        new_obj = Mint(Mint.get_value(other))
        new_obj //= self
        return new_obj


from collections import Counter

C = Counter(S)
ans = Mint(1)
for c in list(C.values()):
    ans *= c + 1
print((ans - 1))

-import sys -from collections import Counter - - -def main(): -    input = sys.stdin.readline -    N = int(eval(input())) -    S = input().rstrip() -    C = Counter(S) -    ans = Mint(1) -    for a in list(C.values()): -        ans *= a + 1 -    print((ans - 1)) +N = int(eval(input())) +S = eval(input()) +MOD = 10**9 + 7 -    def __init__(self, value=0, mod=10**9 + 7): -        self.value = ((value % mod) + mod) % mod -        self.mod = mod +    def __init__(self, value=0): +        self.value = value % MOD +        if self.value < 0: +            self.value += MOD -        a, b = self.value, self.mod +        a, b = self.value, MOD -        return (u + self.mod) % self.mod +        if u < 0: +            u += MOD +        return u -        return self.value == other.val +        return self.value == other.value -        return Mint(-self.value, self.mod) +        return Mint(-self.value) -        self.value = (self.value + Mint.get_value(other)) % self.mod +        self.value += Mint.get_value(other) +        if self.value >= MOD: +            self.value -= MOD -        new_obj = Mint(self.value, self.mod) +        new_obj = Mint(self.value) -        self.value = (self.value - Mint.get_value(other) + self.mod) % self.mod +        self.value -= Mint.get_value(other) +        if self.value < 0: +            self.value += MOD -        new_obj = Mint(self.value, self.mod) +        new_obj = Mint(self.value) -        new_obj = Mint(Mint.get_value(other), self.mod) +        new_obj = Mint(Mint.get_value(other)) -        self.value = self.value * Mint.get_value(other) % self.mod +        self.value = self.value * Mint.get_value(other) % MOD -        new_obj = Mint(self.value, self.mod) +        new_obj = Mint(self.value) -        other = other if isinstance(other, Mint) else Mint(other, self.mod) -        self *= other.inverse +        other = other if isinstance(other, Mint) else Mint(other) +        self *= other.inverse() -        new_obj = Mint(self.value, self.mod) +        new_obj = Mint(self.value) -        new_obj = Mint(Mint.get_value(other), self.mod) +        new_obj = Mint(Mint.get_value(other)) -if __name__ == "__main__": -    main() +from collections import Counter + +C = Counter(S) +ans = Mint(1) +for c in list(C.values()): +    ans *= c + 1 +print((ans - 1))