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 OCaml (4.02.3) (judge verdict: Accepted)

let rec pow acc n m =
  if m = 0 then acc else pow (acc * n) n (m - 1)

let pow = pow 1

let solve n s =
  let p10_9_7 = (pow 10 9) + 7 in
  let counter = Array.make 26 0 in
  let inc c = 
    let i = Char.code c - Char.code 'a' in counter.(i) <- counter.(i) + 1 in
  for ic = 0 to (String.length s) - 1 do
    String.get s ic |> inc
  done;
  let result = ref 1 in
  for i = 0 to 25 do
    if counter.(i) > 0 then 
      result := (!result * (counter.(i) + 1)) mod p10_9_7
  done;
  (!result - 1)

let _ =
  let n = Scanf.scanf "%d\n" (fun n -> n) in
  let s = Scanf.scanf "%s\n" (fun s -> s) in
  print_int @@ solve n s