Problem:
Score : 200 points

Problem Statement

You are given a string S of length N.
Among its subsequences, count the ones such that all characters are different, modulo 10^9+7. Two subsequences are considered different if their characters come from different positions in the string, even if they are the same as strings.

Here, a subsequence of a string is a concatenation of one or more characters from the string without changing the order.

Constraints

1 \leq N \leq 100000

S consists of lowercase English letters.

|S|=N

Input

Input is given from Standard Input in the following format:

N
S

Output

Print the number of the subsequences such that all characters are different, modulo 10^9+7.

Sample Input 1

4
abcd

Sample Output 1

15

Since all characters in S itself are different, all its subsequences satisfy the condition.

Sample Input 2

3
baa

Sample Output 2

5

The answer is five: b, two occurrences of a, two occurrences of ba. Note that we do not count baa, since it contains two as.

Sample Input 3

5
abcab

Sample Output 3

17

Solution in C# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GC031A2
{
    class Program
    {
        static void Main(string[] args)
        {
            // 整数の入力
            int n = int.Parse(Console.ReadLine());
            // スペース区切りの整数の入力
            //string[] input = Console.ReadLine().Split(' ');
            //int b = int.Parse(input[0]);
            //int c = int.Parse(input[1]);
            // 文字列の入力
            string s = Console.ReadLine();
            string[] T = new string[n];
            Dictionary<string, int> dict_Table = new Dictionary<string, int>();
            for (int i = 0; i < n; i++)
            {
                T[i] = s.Substring(i, 1);
                if (dict_Table.ContainsKey(T[i]))
                {
                    dict_Table[T[i]]++;
                }
                else
                {
                dict_Table.Add(T[i], 1);
                }
            }
            long ans=1L; // long型
            long seed = 1000000007L;
            foreach( KeyValuePair<string,int> item in dict_Table)
            {
                //Console.WriteLine("{0}:{1}",item.Key,item.Value);
                ans*=(item.Value+1);
            }
            Console.WriteLine((ans-1) % seed);

        }
    }
}