from collections import Counter

from functools import reduce

from operator import mul



mod = 10 ** 9 + 7





def my_mul(a, b):

    return a * b % mod





n = int(eval(input()))

s = eval(input())



cnt = Counter(s)



print((reduce(my_mul, (v + 1 for v in list(cnt.values()))) - 1))



# 同じ文字列でも、異なる位置から作られたものは区別するため、2

# N − 1 通りのすべての部分列が区別され

# ることになります。

# 条件より、同じ文字を 2 度使ってはいけないため、ある文字 c について colorful の条件を壊さないとり方

# は (c の出現回数 + 1) となります (どれか 1 つを取るケース及び文字 c を一切取らないケース)

# すべての文字 c についてのこのとり方の積を求め、空文字列の分の 1 を引いた数が答えとなります。

def main():

    from collections import Counter



    MOD = 10 ** 9 + 7



    N = int(eval(input()))

    S = eval(input())



    ctr = Counter(S)



    ret = 1

    for count in list(ctr.values()):

        ret = (ret * (count + 1)) % MOD

    print((ret - 1))





if __name__ == '__main__':

    main()

from collections import Counter
from functools import reduce
from operator import mul

mod = 10**9 + 7


def my_mul(a, b):
    return a * b % mod


n = int(eval(input()))
s = eval(input())
cnt = Counter(s)
print((reduce(my_mul, (v + 1 for v in list(cnt.values()))) - 1))
# 同じ文字列でも、異なる位置から作られたものは区別するため、2
# N − 1 通りのすべての部分列が区別され
# ることになります。
# 条件より、同じ文字を 2 度使ってはいけないため、ある文字 c について colorful の条件を壊さないとり方
# は (c の出現回数 + 1) となります (どれか 1 つを取るケース及び文字 c を一切取らないケース)
# すべての文字 c についてのこのとり方の積を求め、空文字列の分の 1 を引いた数が答えとなります。

def main():
    from collections import Counter

    MOD = 10**9 + 7
    N = int(eval(input()))
    S = eval(input())
    ctr = Counter(S)
    ret = 1
    for count in list(ctr.values()):
        ret = (ret * (count + 1)) % MOD
    print((ret - 1))


if __name__ == "__main__":
    main()

-from collections import Counter -from functools import reduce -from operator import mul +def main(): +    from collections import Counter -mod = 10**9 + 7 +    MOD = 10**9 + 7 +    N = int(eval(input())) +    S = eval(input()) +    ctr = Counter(S) +    ret = 1 +    for count in list(ctr.values()): +        ret = (ret * (count + 1)) % MOD +    print((ret - 1)) -def my_mul(a, b): -    return a * b % mod - - -n = int(eval(input())) -s = eval(input()) -cnt = Counter(s) -print((reduce(my_mul, (v + 1 for v in list(cnt.values()))) - 1)) -# 同じ文字列でも、異なる位置から作られたものは区別するため、2 -# N − 1 通りのすべての部分列が区別され -# ることになります。 -# 条件より、同じ文字を 2 度使ってはいけないため、ある文字 c について colorful の条件を壊さないとり方 -# は (c の出現回数 + 1) となります (どれか 1 つを取るケース及び文字 c を一切取らないケース) -# すべての文字 c についてのこのとり方の積を求め、空文字列の分の 1 を引いた数が答えとなります。 +if __name__ == "__main__": +    main()