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

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

문자열 경로

시간 제한1초메모리 제한128 MB

요약
아래쪽이나 오른쪽으로만 이동해 좌상단에서 우하단까지 이르는 경로 위에 주어진 두 문자열이 각각 나타나게 하는 N행 M열 알파벳 격자 수를 셉니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 조합론
정답자
아직 제출이 없습니다

문제

N×MN \times M 크기의 직사각형 격자가 있다. 각 칸에는 알파벳 대문자가 하나씩 적혀 있다. 행 번호는 위에서 아래로 1번부터 NN번까지, 열 번호는 왼쪽에서 오른쪽으로 1번부터 MM번까지 붙어 있다.

(1,1)(1, 1)에서 출발해 한 번에 아래쪽이나 오른쪽으로 한 칸씩 움직여 (N,M)(N, M)에 도착하는 경로를 생각하자. 지나간 칸에 적힌 문자를 지나간 순서대로 빠짐없이 이어 붙이면 길이가 N+M−1N+M-1인 문자열이 되고, 이 문자열을 그 격자의 문자열 경로라고 한다. 경로를 어떻게 잡느냐에 따라 격자 하나에서 문자열 경로가 여러 개 나오기도 한다.

길이가 N+M−1N+M-1인 서로 다른 문자열 두 개가 주어진다. 두 문자열이 모두 문자열 경로가 되는 직사각형 격자가 몇 개인지 세는 프로그램을 작성하시오. 같은 자리의 칸에 적힌 문자가 하나라도 다르면 두 격자는 서로 다른 것으로 센다. 답이 커질 수 있으므로 1,000,000,009로 나눈 나머지를 출력한다.

입력

첫째 줄에 두 자연수 NN과 MM이 주어진다. (1≤N,M≤81 \le N, M \le 8)

둘째 줄과 셋째 줄에 알파벳 대문자로 이루어진 길이 N+M−1N+M-1인 문자열이 한 줄에 하나씩 주어진다. 두 문자열은 서로 다르다.

출력

주어진 두 문자열이 모두 문자열 경로가 되는 직사각형 격자의 개수를 1,000,000,009로 나눈 나머지를 출력한다.

힌트

N=2N = 2, M=2M = 2이고 두 문자열이 ABC와 ADC일 때, 아래 두 격자가 조건을 만족한다.

AB
DC
AD
BC

예제2

  1. 예제 1

    입력
    2 2
    ABC
    ADC
    
    예상 출력
    2
    
  2. 예제 2

    입력
    1 1
    A
    B
    
    예상 출력
    0