만드는 중입니다

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

Play Onwards

면접 대비

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

요약
단어들을 비어 있지 않은 두 목록으로 나누어, 같은 목록 안에서 길이 K인 공통 부분 문자열을 공유하는 단어 쌍이 없게 합니다. 불가능하면 No를 출력합니다.
난이도

보통10점 중 4점

유형
그래프, 문자열 매칭, BFS
정답자
아직 제출이 없습니다

Play Onwards

서훈이는 용훈이의 아재개그 때문에 고통받고 있다. 다음은 서훈이와 용훈이의 대화 일부이다.

용훈 : (휘파람을 불 듯이) 장미란에게 장미란 무엇일까~?

서훈 : (…)

서훈 : (간절하게) 용훈이형, 제발 그러지 좀 마.

매일 용훈이의 언어폭력(?)에 시달리던 서훈이는 어느 날 용훈이와 함께 새로운 외국어를 배우기로 했다. 교재를 살펴보니 서훈이가 익혀야 할 단어는 총 NN개였다.

교재에 나오는 순서대로 NN개의 단어를 외우면 좋겠지만, 서훈이는 외국어를 공부하는 동안 용훈이가 배운 단어로 아재개그를 할까 봐 경계하고 있다.

용훈이가 두 단어로 아재개그를 하려면, 두 단어에서 길이가 KK인 연속한 부분문자열을 하나씩 골라 서로 같게 만들 수 있어야 한다. 예를 들어 jangmiran과 jangmi는 길이 6인 문자열 jangmi를 공통으로 포함하므로, KK가 6 이하이면 용훈이는 두 단어로 아재개그를 할 수 있다. 반면 ant와 ainta는 nt를 공통으로 포함하지만 ant는 ainta에 연속한 형태로 들어 있지 않다(ant는 ainta의 글자를 골라 만들 수 있지만 연속하지 않다). 따라서 K=3K=3이면 용훈이는 두 단어로 아재개그를 할 수 없다.

서훈이는 단어를 두 개의 단어장으로 나누려고 한다. 모든 단어는 두 단어장 중 한 곳에만 들어가야 하고, 각 단어장에는 단어가 최소 하나 있어야 한다.

서훈이는 용훈이가 두 단어장 중 어느 쪽을 골라도 그 단어장의 단어로 아재개그를 할 수 없게 만들고자 한다. 서훈이를 도와, 용훈이가 아재개그를 할 수 없도록 단어장을 짜 주는 프로그램을 작성하여라.

입력

첫 번째 줄에 단어의 수 NN과 용훈이가 아재개그를 하기 위해 필요한 최소 유사도 KK가 주어진다. (3≤N≤2003 \le N \le 200, 1≤K≤201 \le K \le 20)

두 번째 줄부터 NN개의 줄에 단어장에 있는 단어들의 알파벳 발음이 순서대로 주어진다. 단어는 영어 소문자로만 이루어진 길이 1 이상 20 이하인 문자열이다.

서훈이와 용훈이가 동음이의어를 한 번에 모두 익히는 것은 아니므로, 같은 단어가 단어장에 여러 번 나타날 수 있다.

출력

서훈이가 단어장을 어떻게 만들어도 용훈이가 아재개그를 할 수 있다면 첫 번째 줄에 No만 출력한다. 그렇지 않다면 첫 번째 줄에 Yes를 출력하고, 이어서 NN줄에 걸쳐 각 단어가 들어간 단어장 번호를 출력한다. 단어를 첫 번째 단어장에 넣어야 하면 1을, 두 번째 단어장에 넣어야 하면 2를 출력한다.

답이 여러 개이면 그중 아무거나 출력해도 정답으로 인정한다.

예제1

  1. 예제 1

    입력
    4 3
    abcd
    bcda
    cdab
    dabc
    
    예상 출력
    Yes
    1
    2
    1
    2