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: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < n; i++)
#define repp(i, n, m) for (int i = (int)(n); i < (int)(m); i++)
#define rrep(i, n, m) for (int i = n; i >= m; i--)
#define p(a, b) printf(a, b);
#define c(s) cout << (s) << endl;
#define yes cout << "Yes" << endl;
#define no cout << "No" << endl;
#define YES cout << "YES" << endl;
#define NO cout << "NO" << endl;
#define cyn(c) cout << (c ? "Yes" : "No") << endl;
#define cYN(c) cout << (c ? "YES" : "NO") << endl;
#define pyn(c) printf("%s\n", c ? "Yes" : "No");
#define pYN(c) printf("%s\n", c ? "YES" : "NO");
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<LL, LL> P;
template <class T>
bool contain(const std::string &s, const T &v)
{
    return s.find(v) != std::string::npos;
}

set<ULL> s;
ULL mod = 1e9 + 7;

    ULL
    combination(ULL n, ULL r)
{
    if (r * 2 > n)
        r = n - r;
    ULL dividend = 1;
    ULL divisor = 1;
    for (ULL i = 1; i <= r; ++i)
    {
        dividend = ((dividend%mod) * ((n - i + 1)%mod))%mod;
        divisor = ((divisor%mod) * (i%mod)) % mod;
    }
    return dividend / divisor;
}

int main() {
    ULL N,ans=0,sub=0; string S; cin>>N>>S;
    rep(i, S.size()){
        s.insert(S[i]);
    }
    sub = N - s.size();
    if(N==s.size()){
        for(ULL i=1; i<=N; i++){
            ans += combination(N, i);
        }
    }else{
        for(ULL i=1; i<=s.size(); i++){
            ans += combination(N, i);
            if(i!=1){
                ans -= sub;
                sub *= sub+1;
            }
        }
    }
    cout<<ans<<endl;
}