XEN 3166
면접 대비시간 제한2초메모리 제한512 MB
각 나라에 첫 글자로 시작하는 길이 K의 부분열 코드를 부여해 코드 순서가 이름 사전 순서와 일치하도록 하거나 불가능을 판정한다.
문제
이 세계에는 1부터 N까지 번호가 붙은 N개의 나라가 있다. 각 나라는 나라 이름과 나라 코드를 가진다. 두 값은 모두 문자열이며, 서로 다른 두 나라가 같은 이름을 가질 수는 없다. 이 문제에서는 모든 문자열이 대문자 알파벳(A-Z)으로만 이루어져 있다고 가정한다.
널리 알려진 코드 표준 중 하나는 ISO가 정한 ISO 3166이다. Xenia는 이 표준에서 순서가 어긋나는 경우를 발견했다. 예를 들어 "INDIA"의 코드는 "IN"이고 "INDONESIA"의 코드는 "ID"이다. 사전식 순서에서는 "INDONESIA"가 "INDIA"보다 뒤에 오지만, 코드 순서에서는 "IN"이 "ID"보다 뒤에 온다.
이 점을 바로잡기 위해 Xenia는 XEN 3166이라는 자체 표준을 만들었다. 규칙은 다음과 같다.
- 각 나라의 코드는 그 나라 이름의 부분 수열이다.
- 각 나라의 코드 첫 글자는 그 나라 이름 첫 글자와 같다.
- 각 나라의 코드 길이는 정확히 K이다.
- 이름이 S인 나라의 코드가 S'이고 이름이 T인 나라의 코드가 T'일 때, S가 T보다 사전식으로 작을 때 정확히 그때만 S'도 T'보다 사전식으로 작다.
문자열 가 문자열 의 부분 수열이라는 것은 를 만족하는 정수 수열 가 존재하고 모든 에 대해 가 성립한다는 뜻이다. 예를 들어 "ID", "IN", "IND"는 "INDIA"의 부분 수열이지만 "IDN", "INN", "Z"는 "INDIA"의 부분 수열이 아니다.
문자열 가 문자열 보다 사전식으로 작다는 것은 다음 중 적어도 하나가 성립한다는 뜻이다.
- 이고 모든 에 대해 이다.
- 이고 모든 에 대해 인 인덱스 가 존재한다.
예를 들어 나라가 두 개뿐이고 이며 이름이 "INDIA"와 "INDONESIA"인 경우를 보자. 규칙을 만족하는 배정으로는 다음이 있다.
- "INDIA"에 "ID", "INDONESIA"에 "IN"
- "INDIA"에 "IA", "INDONESIA"에 "ID"
- "INDIA"에 "II", "INDONESIA"에 "IO"
N, K와 나라 이름 목록이 주어진다. XEN 3166 규칙을 만족하도록 각 나라에 코드를 배정하거나, 그런 배정이 불가능하다고 판단하라.
입력
첫째 줄에 나라 수와 코드 길이를 나타내는 두 정수 N, K가 주어진다(, ). 다음 N개의 줄에는 나라 이름이 한 줄에 하나씩 주어진다. 각 이름은 길이가 1 이상 200000 이하인 대문자 알파벳(A-Z) 문자열이다. 모든 이름 길이의 합은 200000을 넘지 않는다. 서로 다른 두 나라가 같은 이름을 가지는 일은 없다.
출력
XEN 3166 규칙을 만족하는 코드 배정이 가능하면 첫째 줄에 "YES"를 출력한다(따옴표는 제외). 다음 N개의 줄에는 각 나라의 코드를 입력 순서대로 한 줄에 하나씩 출력한다. i번째 줄은 i번째 나라의 코드이다. 가능한 배정이 여러 개이면 그 중 아무거나 출력해도 된다.
그런 배정이 불가능하면 한 줄에 "NO"만 출력한다(따옴표는 제외).
힌트
첫 번째 샘플은 본문에 나온 "INDIA"와 "INDONESIA" 경우와 같다.