아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

비밀번호

시간 제한1.5초메모리 제한64 MB

요약
각각 길이가 m인 n개의 문자열이 주어질 때, 열을 재배열해 행들이 사전순으로 정렬되도록 하고, 그러한 순열 중 사전순으로 가장 작은 것을 구하거나 NIE를 출력한다.
난이도

어려움10점 중 8점

유형
그리디, 정렬, 문자열, 구현
정답자
아직 제출이 없습니다

문제

Johnny는 컴퓨터 보안에 집착한다. 웹사이트마다 다른 비밀번호를 쓰고, 출력한 종이도 파쇄한다. 그런데 이런 사고가 났다. 비밀번호가 적힌 종이를 실수로 분쇄기에 넣어버린 것이다. 그런데 놀랍게도, 이 종이는 각 조각이 텍스트의 한 열에 대응하도록 잘렸다. 게다가 Johnny는 모든 비밀번호가 영문 대문자로만 이루어져 있고, 서로 다르며, 길이가 모두 같고, 사전순으로 적혀 있었다는 사실을 확실히 알고 있다. Johnny는 열에 번호를 붙여 나란히 놓았지만, 자신이 정한 순서가 올바른지 확신하지 못한다. Johnny를 도와 각 행에 적힌 단어들이 사전순으로 정렬되도록 텍스트의 열을 순열로 재배열하는 방법을 계산하는 프로그램을 작성하시오. 가능한 순열이 여러 개라면 그중 사전순으로 가장 작은 것을 선택한다.

입력

첫째 줄에 두 자연수 n,mn, m (1≤n⋅m≤1061 \le n \cdot m \leq 10^6)이 공백으로 구분되어 주어진다. 다음 nn개 줄에 nn개의 단어가 한 줄에 하나씩 주어진다. 각 단어는 영문 대문자 mm개로 이루어진다.

출력

각 행의 단어들이 사전순으로 정렬되도록 하는 열의 순열을 나타내는 mm개의 자연수를 한 줄에 출력한다. 그러한 순열이 여러 개라면 그중 사전순으로 가장 작은 것을 출력한다. 그러한 순열이 없으면 대신 "NIE" (폴란드어로 '아니오')를 출력한다.

힌트

예제 1에서 설명한 방식으로 열을 재배열하면 단어 "MTOEK", "SKAIA"를 얻으며, 이들은 사전순으로 정렬되어 있다.

예제 2에서는 열을 어떻게 재배열해도 각 행에서 얻어지는 단어들이 사전순으로 정렬되게 할 수 없다.

예제2

  1. 예제 1

    입력
    2 5
    TOMEK
    KASIA
    
    예상 출력
    3 1 2 4 5
    
  2. 예제 2

    입력
    3 3
    CAB
    CBA
    BAC
    
    예상 출력
    NIE