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