정렬된 것으로 주어진 단어 목록에서 글자 순서가 유일한지, 불가능한지, 여러 가지인지 판별한다.
보통6위상 정렬그래프문자열아직 제출이 없습니다시간 제한2초메모리 제한512 MB알파벳의 문자 순서를 알고 있으면 단어 목록을 사전순으로 정렬하는 방법은 간단하다. 한 단어가 다른 단어의 접두사이면 짧은 단어가 항상 먼저 온다. 그렇지 않은 두 단어라면 문자가 처음으로 달라지는 위치가 있고, 그 위치에 놓인 두 문자의 알파벳 순서가 두 단어의 순서를 결정한다.
이제 방향을 뒤집는다. 사전순으로 정렬되어 있다는 단어 목록만 보고 알파벳의 문자 순서를 알아낼 수 있는가?
목록에서 인접한 두 단어를 비교하면 문자 사이의 선후 관계를 하나 얻는다. 이렇게 모은 관계를 모두 만족하는 문자 배열이 알파벳 순서의 후보다. 후보가 정확히 하나면 그 배열이 답이다.
관계끼리 모순일 수 있다. a가 b보다 앞이면서 동시에 b가 a보다 앞이어야 하는 목록은 어떤 문자 순서로도 정렬되지 않는다.
반대로 관계가 부족할 수도 있다. 어떤 두 문자의 선후가 목록에서 전혀 드러나지 않으면 서로 다른 배열 여러 개가 모두 목록을 설명한다.
첫 줄에 L과 N이 공백으로 구분되어 주어진다. L은 이 알파벳에 속한 문자 중 영어 알파벳 순서로 가장 뒤에 있는 소문자이고 b≤L≤z이다. 즉 a부터 L까지의 소문자 전부가 이 알파벳을 이룬다. N은 목록에 있는 문자열의 개수이고 1≤N≤1000이다.
다음 N개의 줄에 문자열이 한 줄에 하나씩, 목록에 놓인 순서 그대로 주어진다. 각 문자열의 길이는 1 이상 1000 이하이고, a부터 L까지의 소문자로만 이루어진다. 같은 문자열이 두 번 주어지지는 않는다. 목록이 실제로 정렬 가능한지는 보장하지 않는다.
목록을 사전순으로 만드는 문자 배열이 정확히 하나면 그 배열을 한 줄에 출력한다. 배열은 a부터 L까지의 문자를 각각 한 번씩 쓴 문자열이며, 목록에 한 번도 나오지 않은 문자도 자리를 차지한다.
그런 배열이 하나도 없으면 IMPOSSIBLE을 출력한다. 둘 이상이면 AMBIGUOUS를 출력한다.