만드는 중입니다

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

단어 마방진

면접 대비

시간 제한2초메모리 제한1024 MB

요약
주어진 N개의 단어 중 L개를 골라 행과 열이 같은 단어로 읽히는 L×L 마방진을 만든다. 사전순으로 가장 앞선 배치를 출력하고, 불가능하면 NONE을 출력한다.
난이도

보통10점 중 5점

유형
백트래킹, 해시맵, 문자열
정답자
아직 제출이 없습니다

문제

L×LL \times L 행렬에 L2L^2개의 알파벳을 적는다. 가로로 읽어서 얻는 단어들과 세로로 읽어서 얻는 단어들이 그 순서까지 서로 같으면, 이러한 행렬을 단어 마방진이라고 부른다.

예를 들어, 다음 행렬은 5×55 \times 5 단어 마방진이다.

HEART
EMBER
ABUSE
RESIN
TREND

인규는 길이가 LL인 단어 NN개가 주어졌을 때, 이 중 LL개를 골라 크기가 L×LL \times L인 단어 마방진을 만들려고 한다. 그러나 인규는 곧 입대해야 해서 이 문제를 풀지 못했다. 인규를 대신해 단어 마방진을 만드는 프로그램을 작성하시오.

입력

첫째 줄에 단어의 길이 L(2≤L≤5)L(2 \le L \le 5)과 단어의 개수 N(L≤N≤20)N(L \le N \le 20)이 주어진다.

둘째 줄부터 NN개의 줄에 길이가 LL인 단어가 한 줄에 하나씩 주어진다. 모든 단어는 알파벳 대문자로 이루어져 있으며, 같은 단어가 여러 번 주어질 수 있다.

출력

단어 마방진을 출력한다. 만들 수 있는 단어 마방진이 여러 개라면 사전 순으로 가장 앞선 단어 마방진을 출력한다.

어떤 경우에도 단어 마방진을 만들 수 없다면 "NONE"을 따옴표를 제외하고 출력한다.

힌트

단어 마방진의 정렬 순서는 마방진에 적힌 모든 문자를 순서대로 이어 만든 하나의 문자열의 정렬 순서와 같다.

ACAB
CABA

위 두 마방진은 각각 ACCA, ABBA의 정렬 순서와 같으므로 아래와 같이 정렬된다.

ABAC
BACA

예제3

  1. 예제 1

    입력
    5 5
    HEART
    EMBER
    ABUSE
    RESIN
    TREND
    
    예상 출력
    HEART
    EMBER
    ABUSE
    RESIN
    TREND
    
  2. 예제 2

    입력
    5 8
    AAAAA
    AAAAA
    BBBBB
    CCCCC
    DDDDD
    EEEEE
    FFFFF
    GGGGG
    
    예상 출력
    NONE
    
  3. 예제 3

    입력
    5 10
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    BBBBB
    BBBBB
    BBBBB
    BBBBB
    BBBBB
    
    예상 출력
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    AAAAA