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 Java8 (OpenJDK 1.8.0) (judge verdict: Wrong Answer)

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		Map<Character, Long> map = new HashMap<>();
		String target = sc.next();
		for(int i=0; i < target.length(); i++) {
			char str = target.charAt(i);
			if(map.containsKey(str)) {
				map.put(str, map.get(str) + 1);
			}else {
				map.put(str, (long)1);
			}
		}
		List<Long> subtractList = new ArrayList<>();
		for(Entry<Character, Long> entry : map.entrySet()) {
			long value = entry.getValue();
			subtractList.add(value);
		}
		long tempAns = 1;
		for(Long eachNum : subtractList) {
			tempAns = tempAns * (eachNum + 1);
		}
		System.out.println((tempAns - 1) % (10^9 + 7));
		sc.close();
	}
}