만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

가장 긴 공통 부분 문자열

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

요약
길이가 n인 이진 문자열 s와 길이가 m인 이진 문자열 t 중에서 w가 가장 긴 공통 부분 문자열 중 하나인 쌍의 개수를 998244353으로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 문자열 매칭, 문자열
정답자
아직 제출이 없습니다

문제

리사는 가장 긴 공통 부분 문자열(Longest Common Substring) 문제를 풀기 위한 프로그램을 작성했다. 그 뒤 리사는 이 프로그램으로, '0'과 '1'로 이루어진 두 문자열 ss와 tt에서 둘 모두의 부분 문자열인 가장 긴 문자열 ww를 찾았다. 가장 긴 문자열이 여러 개라면, 리사는 그중 임의의 하나를 찾았다.

리사가 찾은 ww의 길이는 매우 짧았다. 최대 3이다.

리사는 nn(ss의 길이), mm(tt의 길이), 그리고 ww를 기억하지만, 문자열 ss와 tt 자체는 기억하지 못한다. 이제 리사는 길이가 각각 nn, mm이고 '0'과 '1'로만 이루어졌으며, ww를 가장 긴 공통 부분 문자열 중 하나로 갖는 문자열 쌍 (s,t)(s, t)가 몇 개인지 궁금해한다.

리사를 도와 이런 쌍의 개수를 998 244 353998\,244\,353으로 나눈 나머지로 구하라. n=mn = m이고 s≠ts \ne t이면 (s,t)(s, t)와 (t,s)(t, s)는 서로 다른 쌍으로 센다.

입력

첫 번째 줄에 문자열 ss, tt, ww의 길이를 뜻하는 정수 nn, mm, kk가 주어진다 (1≤n,m≤1001 \le n, m \le 100; 1≤k≤min⁡(3,n,m)1 \le k \le \min(3, n, m)).

두 번째 줄에 '0'과 '1'로 이루어진 길이 kk의 문자열 ww가 주어진다.

출력

ww를 가장 긴 공통 부분 문자열 중 하나로 갖는 문자열 쌍 (s,t)(s, t)의 개수를 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

힌트

문자열 aa가 bb의 부분 문자열이라는 것은, bb의 앞과 뒤에서 0개 이상의 문자를 지워 aa를 얻을 수 있다는 뜻이다.

첫 번째 테스트에서 조건을 만족하는 쌍은 모두 ("01", "10"), ("01", "11"), ("10", "01"), ("10", "11"), ("11", "01"), ("11", "10")이다.

예제4

  1. 예제 1

    입력
    2 2 1
    1
    
    예상 출력
    6
    
  2. 예제 2

    입력
    3 4 2
    01
    
    예상 출력
    28
    
  3. 예제 3

    입력
    7 5 3
    110
    
    예상 출력
    399
    
  4. 예제 4

    입력
    23 42 3
    000
    
    예상 출력
    174497840