아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Pattern Language

시간 제한5초메모리 제한512 MB

요약
M개의 문자에 각각 정해진 한도 u_i 이하의 숫자를 넣어 전체 문자열이 회문이 되게 하는 경우의 수를 세는 문제다. 거울 대칭으로 짝지어진 두 위치는 같은 숫자를 받아야 한다.
난이도

보통10점 중 6점

유형
유니온 파인드, 수학, 조합론, 구현
정답자
아직 제출이 없습니다

문제

MM개의 서로 다른 알파벳 var1,var2,…,varMvar_1, var_2, \ldots, var_M이 있다. 0,1,…,9,var1,var2,…,varM0, 1, \ldots, 9, var_1, var_2, \ldots, var_M의 10+M10+M 종류 문자로 이루어진 길이 NN의 문자열 s1s2s3…sNs_1s_2s_3\ldots s_N이 주어진다. 이 문자열의 각 알파벳을 숫자로 바꾸어 회문이 되게 하려 한다. (회문이란 앞에서 읽어도 뒤에서 읽어도 같은 문자열을 말한다.) 같은 알파벳은 같은 숫자로 바꾸어야 한다. 또한 주어진 모든 알파벳 varivar_i는 문자열 s1s2s3…sNs_1s_2s_3\ldots s_N에 적어도 한 번은 나타난다.

알파벳 varivar_i는 00 이상 uiu_i 이하의, leading zero를 포함하지 않는 정수로 바꿀 수 있다. 바꾼 뒤의 문자열이 회문이 되는 교체 방법이 몇 가지인지 mod 109+710^9+7로 구하여라. 알파벳의 교체 방법이 다르면 얻어지는 문자열이 같아도 다른 것으로 센다.

입력

입력은 다음 형식으로 주어진다.

NN MM

s1s2s3…sNs_1s_2s_3\ldots s_N

var1var_1 u1u_1

......

varMvar_M uMu_M

출력

교체 방법의 경우의 수를 109+710^9 + 7로 나눈 나머지를 한 줄로 출력하라.

제한

  • 1≤N≤5001 ≤ N ≤ 500
  • 1≤M≤101 ≤ M ≤ 10
  • 0≤ui≤990 ≤ u_i ≤ 99
  • sis_i ∈ {′0′,′1′,…,′9′,var1,var2,…,varM}\{'0', '1', \ldots, '9', var_1, var_2, \ldots, var_M\}
  • vari∈{′a′,′b′,…,′j′}var_i ∈ \{'a', 'b', \ldots, 'j'\}
  • 각 알파벳 varivar_i는 s1s2s3…sNs_1s_2s_3 \ldots s_N에 적어도 한 번은 나타난다.
  • var1,var2,…,varMvar_1, var_2, \ldots, var_M은 모두 서로 다르다

예제3

  1. 예제 1

    입력
    3 1
    a1a
    a 99
    
    예상 출력
    19
    
  2. 예제 2

    입력
    5 3
    jbfjb
    f 50
    b 25
    j 5
    
    예상 출력
    252
    
  3. 예제 3

    입력
    7 3
    jag2013
    j 53
    a 10
    g 93
    
    예상 출력
    23