문자열 테이블

이웃한 칸의 문자열을 사전순으로 비교해 이어 붙이는 표를 만들고, 마지막 칸 문자열의 지정된 위치부터 50자를 출력한다.

어려움8동적 계획법문자열재귀분할 정복아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

두 문자열 sstt가 주어진다. 두 문자열에 쓰인 문자는 모두 서로 다르다. 즉, 같은 문자가 두 번 이상 나오지 않으며, ss에 나오는 문자는 tt에 나오지 않고 tt에 나오는 문자도 ss에 나오지 않는다.

ss의 길이를 NN, tt의 길이를 MM이라 하자. 2차원 배열 table은 다음과 같이 정의한다.

  • table[i][0] = s[i-1] (1iN1 \le i \le N)
  • table[0][j] = t[j-1] (1jM1 \le j \le M)
  • table[i][j] = min(table[i-1][j], table[i][j-1]) + max(table[i-1][j], table[i][j-1]) (1iN1 \le i \le N, 1jM1 \le j \le M)

min은 두 문자열 중 사전 순으로 앞서는 문자열을, max는 사전 순으로 뒤에 오는 문자열을 돌려주는 함수이다. 문자는 ASCII 코드 순서로 비교하므로 숫자가 대문자보다, 대문자가 소문자보다 앞선다. A+B는 문자열 A 뒤에 문자열 B를 이어 붙이는 연산이다.

table[N][M]의 부분 문자열을 구하는 프로그램을 작성하시오. 부분 문자열이 매우 길어질 수 있으므로 pos번째 문자부터 min(50,Lpos)\min(50, L - pos)개의 문자만 출력한다. 여기서 LLtable[N][M]의 길이이고, 문자의 위치는 0부터 센다.

입력

첫째 줄에 ss, 둘째 줄에 tt, 셋째 줄에 pospos가 주어진다. (0pos<L0 \le pos < L)

sstt의 길이는 각각 1 이상 30 이하이며, 알파벳 대문자, 소문자, 숫자로만 이루어져 있다.

출력

첫째 줄에 table[N][M]pospos번째 문자부터 min(50,Lpos)\min(50, L - pos)개의 문자로 이루어진 부분 문자열을 출력한다.