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 JavaScript (node.js v5.12) (judge verdict: Accepted)

"use strict";

const main = (input) => {
  const N = input.split('\n')[0]-0;
  const S = input.split('\n')[1].split("");
  let wmap = {};
  
  S.forEach(function(w){
    wmap[w] = wmap[w]?wmap[w]+1:1;
  });
  
  let ans = 1;
  Object.keys(wmap).forEach((w)=>{
    ans *= wmap[w]+1;
    ans = ans%1000000007;
  });

  console.log(ans-1);
}

const pow = (a,b) => {
  var ans = 1;
  for(var i=0;i<b;i++){
    ans=ans*a;
    if(ans>=1000000007){
      ans = ans%1000000007;
    }
  }
  return ans;
};

main(require('fs').readFileSync('/dev/stdin', 'UTF-8'));