치환 암호 키 찾기
면접 대비시간 제한1초메모리 제한64 MB
서로 다른 N개의 단어와 목표 순열이 주어질 때, 암호화한 단어들이 그 순서로 정렬되게 하는 사전순으로 가장 작은 치환 암호 키를 찾고, 없으면 NE를 출력한다.
문제
미르코는 서로 다른 단어 개를 치환 암호로 암호화하려고 한다.
치환 암호에는 키가 필요하다. 키는 영어 소문자 26개를 한 번씩 사용해 만든 문자열이다. 암호화할 때는 단어에 있는 'a'를 모두 키의 첫 번째 글자로, 'b'를 모두 키의 두 번째 글자로 바꾸고, 같은 방식으로 'z'까지 바꾼다.
미르코에게는 배열 도 있다. 는 부터 까지의 수를 한 번씩 담은 순열이다. 미르코는 단어 개를 모두 암호화한 다음 사전순으로 정렬했을 때, 처음에 번째에 있던 단어가 번째 자리에 오도록 하는 키를 원한다.
사전순은 사전에 단어가 실리는 순서다. 두 단어를 비교할 때는 왼쪽부터 글자를 훑어 서로 다른 첫 위치를 찾고, 그 자리의 글자가 더 작은 단어를 더 작다고 본다. 단어 가 단어 의 앞부분과 똑같다면 가 보다 작다.
미르코는 오늘 암호화할 마음이 없다. 대신 키를 구해 주자.
입력
첫째 줄에 정수 이 주어진다. ()
다음 개 줄에 단어가 한 개씩 주어진다. 단어는 영어 소문자로만 이루어지고 길이는 이하다. 단어는 모두 서로 다르다.
마지막 줄에 배열 의 원소 개가 주어진다.
출력
조건을 만족하는 키가 없으면 NE를 출력한다.
키가 있으면 첫째 줄에 DA를 출력하고, 둘째 줄에 키를 출력한다. 키는 영어 소문자 26개가 한 번씩 나오는 문자열이다. 조건을 만족하는 키가 여러 개면 사전순으로 가장 앞서는 키를 출력한다.
힌트
첫 번째 예제에서 두 단어는 암호화하면 ba와 ac가 된다. 이를 사전순으로 정렬하면 ac, ba가 되므로 첫 번째 단어는 두 번째 자리로 가고 두 번째 단어는 첫 번째 자리로 간다.