끝말잇기

면접 대비

시간 제한1초메모리 제한256 MB

요약
단어들의 첫 글자와 끝 글자를 연결한 그래프에서 오일러 경로 조건을 확인해 모든 단어를 한 줄로 이어 배열할 수 있는지 판단하는 문제입니다.
난이도

보통10점 중 5점

유형
그래프, 유니온 파인드, 수학
정답자
아직 제출이 없습니다

문제

비밀의 문 가운데 일부에는 아주 흥미로운 단어 퍼즐이 걸려 있다. 고고학 발굴대는 문을 열기 위해 이 퍼즐을 반드시 풀어야 한다. 문을 열 다른 방법이 없으므로, 이 퍼즐은 우리에게 매우 중요하다.

각 문에는 수많은 자석판이 붙어 있고, 판마다 하나의 단어가 적혀 있다. 이 판들을 한 줄로 배열하되, 각 단어의 첫 글자가 바로 앞 단어의 마지막 글자와 같도록 이어 붙여야 한다. 예를 들어 단어 ac*m* 뒤에는 단어 *m*otorola가 올 수 있다. 단어 목록을 읽어 들여, 주어진 규칙에 따라 모든 판을 하나의 순서로 배열해 문을 열 수 있는지 판정하는 프로그램을 작성하라.

입력

입력은 TT개의 테스트 케이스로 이루어진다. 첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스의 첫 줄에는 판의 개수를 나타내는 정수 NN이 주어진다 (1≤N≤1000001 \le N \le 100000). 이어서 정확히 NN개의 줄이 오며, 각 줄에는 단어가 하나씩 적혀 있다. 각 단어는 최소 2글자, 최대 1000글자로 이루어지며, 모두 소문자 알파벳 a부터 z까지만 사용한다. 같은 단어가 목록에 여러 번 나타날 수도 있다.

출력

각 테스트 케이스에 대해, 모든 판을 한 줄로 배열하여 각 단어의 첫 글자가 바로 앞 단어의 마지막 글자와 같게 만들 수 있는지 판정하라. 목록의 모든 판을 각각 정확히 한 번씩 사용해야 하며, 여러 번 등장하는 단어는 등장한 횟수만큼 사용해야 한다.

그런 배열이 존재하면 Ordering is possible. 를 출력하고, 그렇지 않으면 The door cannot be opened. 를 출력한다.

예제7

  1. 예제 1

    입력
    3
    2
    acm
    ibm
    3
    acm
    malform
    mouse
    2
    ok
    ok
    
    예상 출력
    The door cannot be opened.
    Ordering is possible.
    The door cannot be opened.
    
  2. 예제 2

    입력
    1
    1
    ok
    
    예상 출력
    Ordering is possible.
    
  3. 예제 3

    입력
    1
    2
    ab
    ba
    
    예상 출력
    Ordering is possible.
    
  4. 예제 4

    입력
    1
    2
    ab
    cd
    
    예상 출력
    The door cannot be opened.
    
  5. 예제 5

    입력
    1
    1
    aa
    
    예상 출력
    Ordering is possible.
    
  6. 예제 6

    입력
    1
    3
    ab
    bc
    cd
    
    예상 출력
    Ordering is possible.
    
  7. 예제 7

    입력
    1
    2
    ab
    ac
    
    예상 출력
    The door cannot be opened.