Sirag

Time limit: 1.4s Memory limit: 512MB Input: sirag.in Output: sirag.out

Fie un șir de caractere SS de lungime NN format din litere mici ale alfabetului englez. Pentru un KK oarecare (K≥1K \geq 1), alegem KK poziții 1≤i1<i2<i3<⋯<iK<N1 \leq i_1 < i_2 < i_3 < \dots < i_K < N în care să tăiem șirul, rezultând K+1K + 1 șiruri, pe care le notăm cu T1,…,TK+1T_1, \ldots, T_{K + 1}, astfel:

T1=S1 S2 … Si1T2=Si1+1 Si1+2 … Si2⋮⋮⋮TK+1=Sik+1 Sik+2 … SN\begin{matrix} T_1 & = & S_1\, S_2\, \ldots\, S_{i_1} \\ T_2 & = & S_{i_1 + 1} \, S_{i_1 + 2}\, \ldots\, S_{i_2} \\ \vdots & \vdots & \vdots \\ T_{K + 1} & = & S_{i_k + 1} \, S_{i_k + 2}\, \ldots \, S_N \end{matrix}

Șirurile T1,…,TK+1T_1, \ldots, T_{K + 1} pot avea lungimi diferite.

Fie CiC_i mulțimea caracterelor ce apar în TiT_i. Spunem că o tăiere este echilibrată dacă ∣C1∣=∣C2∣=⋯=∣CK+1∣|C_1| = |C_2| = \cdots = |C_{K + 1}| --- adică fiecare dintre șirurile T1,…,Tk+1T_1, \ldots, T_{k + 1} conține la fel de multe caractere distincte.

Cerință

Considerăm toate subsecvențele șirului SS și pentru fiecare calculăm numărul de moduri de a o tăia echilibrat (în cel puțin două bucăți). Să se afișeze suma rezultatelor pentru toate subsecvențele modulo 1 000 000 0071 \ 000 \ 000 \ 007.

Date de intrare

Fișierul de intrare sirag.in conține pe prima linie un număr natural NN, lungimea lui SS. Pe a doua linie, se află șirul de caractere SS.

Date de ieșire

Pe prima linie a fișierului de ieșire sirag.out se va scrie suma cerută modulo 1 000 000 0071 \ 000 \ 000 \ 007.

Restricții și precizări

  • 1≤N≤1 000 0001 \leq N \leq 1 \ 000 \ 000
# Scor Restricții
1 14 S1=⋯=SNS_1 = \cdots = S_N
2 7 Toate caracterele care apar în SS sunt distincte
3 11 N≤300N \leq 300
4 10 N≤2 000N \leq 2 \ 000
5 15 N≤7 000N \leq 7 \ 000
6 12 N≤100 000N \leq 100 \ 000
7 31 Fără restricții adiționale

Exemplul 1

sirag.in

3
aaa

sirag.out

5

Explicație

Subsecvențele lui SS sunt:

  • aaa - poate fi tăiat într-un singur mod pentru K=1K = 1;
  • aaa - poate fi tăiat într-un singur mod pentru K=1K = 1;
  • aaa - poate fi tăiat în 22 moduri pentru K=1K = 1 și un singur mod pentru K=2K = 2.

Exemplul 2

sirag.in

6
aabbaa

sirag.out

43

Exemplul 3

sirag.in

20
aababbababbababhhsse

sirag.out

7027

Log in or sign up to be able to send submissions!