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++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<iostream>
#include<string>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	long long N;
	string S;
	cin >> N;
	cin >> S;
	long long i;
	vector<long long> A(30);
	for (i = 0; i < 26; i++) {
		A.at(i) = 0;
	}
	for (i = 0; i < N; i++) {
		switch (S.at(i)) {
		case 'a':
			A[0] += 1;
			break;
		case 'b':
			A[1] += 1;
			break;
		case 'c':
			A[2] += 1;
			break;
		case 'd':
			A[3] += 1;
			break;
		case 'e':
			A[4] += 1;
			break;
		case 'f':
			A[5] += 1;
			break;
		case 'g':
			A[6] += 1;
			break;
		case 'h':
			A[7] += 1;
			break;
		case 'i':
			A[8] += 1;
			break;
		case 'j':
			A[9] += 1;
			break;
		case 'k':
			A[10] += 1;
			break;
		case 'l':
			A[11] += 1;
			break;
		case 'm':
			A[12] += 1;
			break;
		case 'n':
			A[13] += 1;
			break;
		case 'o':
			A[14] += 1;
			break;
		case 'p':
			A[15] += 1;
			break;
		case 'q':
			A[16] += 1;
			break;
		case 'r':
			A[17] += 1;
			break;
		case 's':
			A[18] += 1;
			break;
		case 't':
			A[19] += 1;
			break;
		case 'u':
			A[20] += 1;
			break;
		case 'v':
			A[21] += 1;
			break;
		case 'w':
			A[22] += 1;
			break;
		case 'x':
			A[23] += 1;
			break;
		case 'y':
			A[24] += 1;
			break;
		case 'z':
			A[25] += 1;
			break;
		}
	}
	long long B = 1;
	for (i = 0; i < 26; i++) {
		B = B*(A.at(i) + 1) % 1000000007;
	}
	cout << B - 1;
}