5×5 크기의 정사각형 타일 M개(1≤M≤10)가 있다. 이 타일을 N×N(5≤N≤15) 크기의 정사각형 탁자 위에 한 번에 하나씩 올려놓는다. 타일의 변은 탁자의 변과 평행하고, 타일은 탁자 안에 완전히 들어간다. 나중에 놓는 타일은 먼저 놓은 타일의 일부를 덮을 수 있다.
타일 이름은 A부터 시작하는 연속된 알파벳이다. 타일이 5개면 이름은 A, B, C, D, E다. 마지막 타일까지 놓은 뒤의 모습은 위에서 내려다본 평면도로 적는다. 어떤 타일도 덮지 않은 칸은 .으로 적고, 나머지 칸은 그 자리에서 가장 위에 있는 타일의 이름으로 적는다.
11×11 탁자의 평면도 네 개다. 평면도 1은 타일 B를 놓은 다음 타일 A를 놓은 모습이다.
평면도 1
...........
..BBBBB....
..BBBBB....
..BBBBB....
..BBAAAAA..
..BBAAAAA..
....AAAAA..
....AAAAA..
....AAAAA..
...........
...........
평면도 2
...........
..BBBBB....
..BBBBB....
..BBBBB....
..BBAAAAA..
..BBAAAAACC
DDDDAAAAACC
DDDDAAAAACC
DDDDAAAAACC
DDDDD.CCCCC
DDDDD......
평면도 3
...........
...........
....AAAA...
...BAAAAB..
...BAAAAB..
...BAAAAB..
.CCCAAAAB..
.C.CCCCCB..
.CCCCCCC...
...........
...........
평면도 4
...AAAAA...
...AAAAA...
...AAAAA...
...AAAAADDD
BBBBBAAADDD
BBBBB.DDDDD
BBBCCCDDDDD
BBBCCCDDDDD
BBBCCCCC...
...CCCCC...
...CCCCC...
평면도가 올바르면 가장 먼저 놓였을 수 있는 타일을 모두 알아낼 수 있다. 평면도 2에서 맨 처음 놓인 타일은 B, C, D 중 하나일 수 있지만 A일 수는 없다.
평면도가 올바르지 않은 이유는 두 가지다. 첫째, 어떤 타일이 5×5 정사각형이 아닌 경우다. 평면도 3이 여기에 해당한다. A는 세로 5칸, 가로 4칸만 차지하고, B는 가로로 5칸을 넘으며, C에는 구멍이 있다. 이 중 하나만 있어도 올바르지 않은 평면도다.
둘째, 타일을 하나씩 차례로 놓을 수 없는 경우다. 평면도 4의 네 타일은 서로 맞물려 있어서 어떤 순서로 놓아도 이 모습이 나오지 않는다. 그래서 이 평면도도 올바르지 않다.
평면도가 주어질 때, 올바르지 않으면 NO를 출력하고, 올바르면 가장 먼저 놓였을 수 있는 타일의 이름을 사전순으로 출력하는 프로그램을 작성하시오.
첫째 줄에 타일의 개수 M이 주어진다. 둘째 줄에 탁자의 한 변의 길이 N이 주어진다. 다음 N개 줄에는 평면도가 맨 윗줄부터 한 줄에 N글자씩 주어진다. 각 글자는 .이거나 A부터 시작하는 M개의 대문자 중 하나다.
평면도가 올바르지 않으면 NO를 출력한다. 올바르면 가장 먼저 놓였을 수 있는 타일의 이름을 사전순으로, 사이에 공백 없이 붙여서 출력한다.