만드는 중입니다

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

알파벳 순서 복원

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

요약
정렬된 것으로 주어진 단어 목록에서 글자 순서가 유일한지, 불가능한지, 여러 가지인지 판별한다.
난이도

보통10점 중 6점

유형
위상 정렬, 그래프, 문자열
정답자
아직 제출이 없습니다

문제

알파벳의 문자 순서를 알고 있으면 단어 목록을 사전순으로 정렬하는 방법은 간단하다. 한 단어가 다른 단어의 접두사이면 짧은 단어가 항상 먼저 온다. 그렇지 않은 두 단어라면 문자가 처음으로 달라지는 위치가 있고, 그 위치에 놓인 두 문자의 알파벳 순서가 두 단어의 순서를 결정한다.

이제 방향을 뒤집는다. 사전순으로 정렬되어 있다는 단어 목록만 보고 알파벳의 문자 순서를 알아낼 수 있는가?

목록에서 인접한 두 단어를 비교하면 문자 사이의 선후 관계를 하나 얻는다. 이렇게 모은 관계를 모두 만족하는 문자 배열이 알파벳 순서의 후보다. 후보가 정확히 하나면 그 배열이 답이다.

관계끼리 모순일 수 있다. a가 b보다 앞이면서 동시에 b가 a보다 앞이어야 하는 목록은 어떤 문자 순서로도 정렬되지 않는다.

반대로 관계가 부족할 수도 있다. 어떤 두 문자의 선후가 목록에서 전혀 드러나지 않으면 서로 다른 배열 여러 개가 모두 목록을 설명한다.

입력

첫 줄에 LL과 NN이 공백으로 구분되어 주어진다. LL은 이 알파벳에 속한 문자 중 영어 알파벳 순서로 가장 뒤에 있는 소문자이고 b≤L≤zb \le L \le z이다. 즉 a부터 LL까지의 소문자 전부가 이 알파벳을 이룬다. NN은 목록에 있는 문자열의 개수이고 1≤N≤10001 \le N \le 1000이다.

다음 NN개의 줄에 문자열이 한 줄에 하나씩, 목록에 놓인 순서 그대로 주어진다. 각 문자열의 길이는 1 이상 1000 이하이고, a부터 LL까지의 소문자로만 이루어진다. 같은 문자열이 두 번 주어지지는 않는다. 목록이 실제로 정렬 가능한지는 보장하지 않는다.

출력

목록을 사전순으로 만드는 문자 배열이 정확히 하나면 그 배열을 한 줄에 출력한다. 배열은 a부터 LL까지의 문자를 각각 한 번씩 쓴 문자열이며, 목록에 한 번도 나오지 않은 문자도 자리를 차지한다.

그런 배열이 하나도 없으면 IMPOSSIBLE을 출력한다. 둘 이상이면 AMBIGUOUS를 출력한다.

예제4

  1. 예제 1

    입력
    d 4
    cab
    cda
    ccc
    badca
    
    예상 출력
    adcb
    
  2. 예제 2

    입력
    c 4
    abc
    bca
    cab
    aca
    
    예상 출력
    IMPOSSIBLE
    
  3. 예제 3

    입력
    f 2
    dea
    cfb
    
    예상 출력
    AMBIGUOUS
    
  4. 예제 4

    입력
    e 5
    ebbce
    dbe
    adcd
    bc
    cd
    
    예상 출력
    edabc