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

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

끝말잇기

면접 대비

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

요약
N개의 10자리 단어를 모두 사용해 각 단어의 첫 글자가 앞 단어의 마지막 글자와 같도록 배열합니다. 사전순으로 가장 앞서는 순서를 찾습니다.
난이도

보통10점 중 6점

유형
그래프, DFS
정답자
아직 제출이 없습니다

문제

JOI 국에서는 100종류의 문자가 사용된다. 이 문자들은 컴퓨터에서 직접 표현하기 어려워서, 대신 아래의 표기를 사용한다.

즉, 숫자 2개의 조합인 10×1010 \times 10가지로 표현된다. JOI 국의 사전은 이 표로 정해지는 문자 순서에 따라 단어를 배열한다. 위쪽 행의 문자가 먼저 오고, 같은 행에서는 왼쪽 문자가 먼저 온다.

JOI 국에서는 지금 끝말잇기가 크게 유행하고 있다. 끝말잇기는 참가자가 차례로, 앞 사람이 말한 단어의 마지막 글자로 시작하는 단어를 말하는 게임이다. 한 번 말한 단어는 다시 쓸 수 없다.

어느 날 당신은 친구와 '5 끝말잇기'를 하고 있었다. '5 끝말잇기'에서는 일반 끝말잇기 규칙에 더해, 사용하는 단어가 모두 5글자여야 한다. 당신은 '5 끝말잇기'에서 말한 N개의 단어 목록을 컴퓨터에 기록해 두었는데, 실수로 순서를 뒤섞어 버렸다. 그래서 단어 목록으로부터 '5 끝말잇기'의 진행 과정을 복원하고 싶다.

단어 목록이 주어졌을 때, '5 끝말잇기'의 진행 과정을 복원하는 프로그램을 작성하라.

입력

첫 줄에는 단어의 개수를 나타내는 정수 NN이 주어진다. 이어지는 NN개의 줄에는 각 줄에 단어 하나씩 주어진다. 각 단어는 정확히 숫자 10개로 이루어진 문자열이다. 단어는 사전에 실린 순서대로 입력되며, 모든 단어는 서로 다르다.

출력

주어진 NN개의 단어를 모두 사용한 '5 끝말잇기'가 불가능하면 impossible을 한 줄에 출력하라. 가능하면 사용되는 NN개의 단어를 한 줄에 하나씩 출력하라. 가능한 '5 끝말잇기'가 여러 가지라면 다음 조건을 순서대로 적용하여 고른다.

  • 첫 번째 단어가 사전에서 가장 먼저 실린 것.
  • 위 조건으로 정해지지 않으면, 두 번째 단어가 사전에서 가장 먼저 실린 것.
  • ...
  • 위 조건으로도 정해지지 않으면, NN번째 단어가 사전에서 가장 먼저 실린 것.

제한

  • 1≤N≤500 0001 \le N \le 500\,000, 단어의 개수

예제3

  1. 예제 1

    입력
    5
    0000010201
    0102030403
    0104050603
    0206070801
    0308090002
    
    예상 출력
    0000010201
    0102030403
    0308090002
    0206070801
    0104050603
    
  2. 예제 2

    입력
    4
    9600000098
    9700000099
    9800000099
    9900000098
    
    예상 출력
    impossible
    
  3. 예제 3

    입력
    12
    0114090401
    0214051905
    0304141219
    0510031717
    0703050011
    1102190101
    1108040907
    1110090702
    1313071203
    1707120711
    1902090011
    1909121313
    
    예상 출력
    1909121313
    1313071203
    0304141219
    1902090011
    1108040907
    0703050011
    1110090702
    0214051905
    0510031717
    1707120711
    1102190101
    0114090401