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

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <stdio.h>
long long MAX(long long a,long long b){
    return a>b?a:b;
}
long long MIN(long long a,long long b){
    return a<b?a:b;
}
int compare(const void *a,const void *b){
    return *(long long *)a>*(long long *)b?1:-1;
}
long long factrial(int w){
    long long num=1;
    for(int i=1;i<=w;i++){
        num*=i;
        num%=1000000007;
    }    
    return num;
} 
int main()
{   int a,b,n,m,k,x,y,i;
    scanf("%d",&n);
    char s[n+1];
    scanf("%s",s);
    int alp[26]={0};
    long long ans=1,sub=0;
    int letter=0;
    for(i=0;i<n;i++){
        if(alp[s[i]-'a']==0){
            letter++;
        }
        alp[s[i]-'a']++;
        
    }
    for(i=0;i<26;i++){
            ans*=(alp[i]+1);
            ans%=1000000007;
        
    }
    ans-=1;
    
    
    printf("%lld",ans);

    return 0;
}