테트리스 알파벳

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

요약
글자로 표시된 테트리스 조각들이 놓인 최종 상태가 주어질 때, 조각들이 떨어졌을 수 있는 순서 중 사전순으로 가장 앞선 순서를 구한다.
난이도

보통10점 중 7점

유형
그래프, 위상 정렬, 그리디, 구현
정답자
아직 제출이 없습니다

문제

테트리스는 NN개의 행과 2020개의 열로 이루어진 우물(well)에서 진행된다. 조각(figure)들이 한 번에 하나씩 우물 안으로 곧게 아래로 떨어지며, 각 조각은 상하좌우로 변을 맞대어 이어진 칸들의 집합이다. 조각이 떨어지면, 그 조각의 칸 중 하나가 바닥에 닿거나 이미 채워진 칸 위에 놓일 때까지 계속 내려간다.

모든 조각이 놓인 뒤, 각 조각에는 A부터 Z까지 서로 다른 대문자가 하나씩 붙는다. 우물의 최종 상태가 주어질 때, 조각들이 떨어졌을 수 있는 순서를 하나 복원하여라.

어떤 조각이 가장 마지막에 놓인 조각이 될 수 있으려면, 다른 어떤 조각도 통과하지 않고 우물 밖으로 곧게 위로 들어 올릴 수 있어야 한다. 즉, 같은 열에서 그 조각의 어떤 칸 바로 위에 다른 조각의 칸이 하나도 없어야 한다. 이런 방식으로 마지막 조각부터 하나씩 제거해 나가면 올바른 낙하 순서를 얻을 수 있다.

입력

첫째 줄에 행의 개수를 나타내는 정수 NN (1≤N≤501 \le N \le 50)이 주어진다.

다음 NN개의 줄에는 각각 정확히 2020개의 문자가 주어진다. 각 문자는 조각에 속한 칸을 나타내는 A부터 Z까지의 대문자이거나, 빈 칸을 나타내는 마침표 .(ASCII 4646)이다.

출력

조각들이 떨어진 순서대로 글자들을 한 줄에 출력한다. 가능한 순서가 여러 가지라면 사전순으로 가장 앞서는 것을 출력한다. 입력은 적어도 하나의 올바른 순서가 존재함을 보장한다.

예제3

  1. 예제 1

    입력
    6
    ...........XX.......
    ..........MMMM......
    ..........K.........
    ........KKK.........
    .....ZAAA.FFF.......
    .....ZZZA..F.B......
    
    예상 출력
    BFZAKMX
    
  2. 예제 2

    입력
    2
    BBBB................
    AAAA................
    
    예상 출력
    AB
    
  3. 예제 3

    입력
    1
    A....B....C.........
    
    예상 출력
    ABC