단어 마방진
면접 대비시간 제한2초메모리 제한1024 MB
주어진 N개의 단어 중 L개를 골라 행과 열이 같은 단어로 읽히는 L×L 마방진을 만든다. 사전순으로 가장 앞선 배치를 출력하고, 불가능하면 NONE을 출력한다.
문제
행렬에 개의 알파벳을 적는다. 가로로 읽어서 얻는 단어들과 세로로 읽어서 얻는 단어들이 그 순서까지 서로 같으면, 이러한 행렬을 단어 마방진이라고 부른다.
예를 들어, 다음 행렬은 단어 마방진이다.
인규는 길이가 인 단어 개가 주어졌을 때, 이 중 개를 골라 크기가 인 단어 마방진을 만들려고 한다. 그러나 인규는 곧 입대해야 해서 이 문제를 풀지 못했다. 인규를 대신해 단어 마방진을 만드는 프로그램을 작성하시오.
입력
첫째 줄에 단어의 길이 과 단어의 개수 이 주어진다.
둘째 줄부터 개의 줄에 길이가 인 단어가 한 줄에 하나씩 주어진다. 모든 단어는 알파벳 대문자로 이루어져 있으며, 같은 단어가 여러 번 주어질 수 있다.
출력
단어 마방진을 출력한다. 만들 수 있는 단어 마방진이 여러 개라면 사전 순으로 가장 앞선 단어 마방진을 출력한다.
어떤 경우에도 단어 마방진을 만들 수 없다면 "NONE"을 따옴표를 제외하고 출력한다.
힌트
단어 마방진의 정렬 순서는 마방진에 적힌 모든 문자를 순서대로 이어 만든 하나의 문자열의 정렬 순서와 같다.
위 두 마방진은 각각 ACCA, ABBA의 정렬 순서와 같으므로 아래와 같이 정렬된다.