만드는 중입니다

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

Edit Distance 다시 한 번

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

요약
두 문자열의 편집 거리가 k 이하인지 판단하고, 그렇다면 최소 횟수의 삽입, 삭제, 치환 연산을 출력합니다.
난이도

어려움10점 중 8점

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

문제

편집 거리(edit distance) 문제를 들어 본 적이 있는가? 영어 소문자로 이루어진 두 문자열이 주어지면, 첫 번째 문자열을 두 번째 문자열로 바꾸는 데 필요한 최소 연산 횟수를 구해야 한다. 한 번의 연산은 다음 중 하나이다.

  • 수열의 임의의 위치에 문자 하나를 삽입한다.
  • 수열의 임의의 문자 하나를 삭제한다.
  • 문자 하나를 다른 문자로 치환한다.

우리 대학 사람들은 모두 이 문제를 아주 좋아한다. 어쩌면 조금 지나치게 좋아한다. 그래서 더 쉬운 문제를 만들기로 했다! 두 문자열 s=s1…sns = s_1 \ldots s_n, t=t1…tmt = t_1 \ldots t_m과 정수 kk가 주어진다. 두 문자열의 편집 거리가 kk 이하인지 판단하라. 그렇다면 ss를 tt로 바꾸는 최소 연산 횟수의 연산 수열도 하나 출력하라.

입력

첫 줄에 테스트 케이스의 개수 zz (1≤z≤1001 \leq z \leq 100)가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다.

각 테스트 케이스의 첫 줄에는 정수 n,m,kn, m, k (1≤n,m≤1 000 0001 \leq n, m \leq 1\,000\,000, 0≤k≤10000 \leq k \leq 1000)가 주어진다. 이는 두 문자열의 길이와 문제에 나온 매개변수이다. 둘째 줄에는 길이 nn의 영어 소문자로 이루어진 문자열 ss가, 셋째 줄에는 길이 mm의 영어 소문자로 이루어진 문자열 tt가 주어진다.

모든 테스트 케이스의 문자열 길이 총합은 10710^7을 넘지 않는다.

출력

각 테스트 케이스마다 편집 거리가 kk보다 크면 NO 한 줄을 출력한다. 그렇지 않으면 첫 줄에 YES를 출력한다. 둘째 줄에는 ss를 tt로 바꾸는 데 필요한 최소 연산 횟수 rr을 출력한다. 이어서 연산을 한 줄에 하나씩 rr줄에 걸쳐 출력한다.

  • 길이 ww인 수열의 위치 pp (1≤p≤w+11 \leq p \leq w + 1)에 영어 소문자 cc를 삽입하려면 INSERT p c를 출력한다.
  • 길이 ww인 수열의 위치 pp (1≤p≤w1 \leq p \leq w)에 있는 문자를 삭제하려면 DELETE p를 출력한다.
  • 길이 ww인 수열의 위치 pp (1≤p≤w1 \leq p \leq w)에 있는 문자를 영어 소문자 cc로 치환하려면 REPLACE p c를 출력한다.

예제1

  1. 예제 1

    입력
    2
    3 4 3
    kot
    plot
    5 7 3
    zycie
    porazka
    
    예상 출력
    YES
    2
    REPLACE 1 l
    INSERT 1 p
    NO