알파벳 순서 복원

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

보통6위상 정렬그래프문자열아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

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

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

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

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

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

입력

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

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

출력

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

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