만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Minegraphed

시간 제한2초메모리 제한512 MB

요약
정점이 최대 9개인 방향 그래프가 주어질 때, 빈 칸과 장애물로 이루어진 3차원 격자를 만들어 번호 붙은 칸 사이의 이동 가능 여부가 그래프의 경로 여부와 같게 합니다.
난이도

어려움10점 중 9점

유형
구현, 그래프, 시뮬레이션
정답자
아직 제출이 없습니다

문제

Marika는 "Minegraphed"라는 게임을 만들고 있다. 이 게임은 3차원 직육면체 세계를 돌아다니는 게임이다.

직육면체 게임 필드의 각 칸은 빈 칸이거나 장애물 칸이다. 당신은 항상 빈 칸에 서 있으며, 그 칸은 가장 아래 층에 있거나 장애물 칸 위에 있다. 한 번의 이동은 북, 동, 남, 서 네 방향 중 하나로 할 수 있다. 이동은 다음 규칙을 따른다.

  • 직육면체 밖으로 이동하려고 하면 그 이동은 할 수 없다.
  • 그렇지 않고 앞 칸이 빈 칸이면, 그 칸으로 한 칸 전진한 뒤 가장 아래 층이나 장애물 칸에 닿을 때까지 아래로 떨어진다.
  • 그렇지 않고 맨 위 층이 아니며, 앞 칸이 장애물이고, 자신의 위 칸과 그 장애물의 위 칸이 모두 비어 있으면, 그 장애물 위로 올라간다.
  • 그 밖의 경우에는 이동할 수 없다.

Marika는 정점이 nn개인 방향 그래프를 준비했다. 이제 그녀는 필드를 설계하고, 서로 다른 nn개의 서 있을 수 있는 위치에 1부터 nn까지 번호를 붙이려 한다. 번호 ii가 붙은 칸에서 번호 jj가 붙은 칸으로 유효한 이동을 통해 갈 수 있는 것은, 그래프에서 정점 ii에서 정점 jj로 간선을 따라 갈 수 있는 것과 같을 때이고 그때에만 해당한다. Marika가 이 성질을 만족하는 필드를 설계하도록 도와라.

입력

첫 줄에 정수 nn (1≤n≤91 \le n \le 9)이 주어진다. 이어지는 nn개의 줄에는 각각 0 또는 1인 정수 nn개가 주어진다. ii번째 줄의 jj번째 수는 정점 ii에서 정점 jj로 가는 간선이 있으면 1, 없으면 0이다. ii번째 줄의 ii번째 수는 항상 0이다.

출력

주어진 그래프와 같은 도달 관계를 가진 필드를 층별 표현으로 출력하라.

첫 줄에는 설계할 직육면체의 동서 방향, 남북 방향, 위아래 방향 크기를 나타내는 양의 정수 xx, yy, zz를 출력한다. 이어서 zz개 층을 가장 위 층부터 가장 아래 층까지 순서대로 출력하며, 블록 사이는 빈 줄 하나로 구분한다. 각 블록은 길이 xx인 줄 yy개로 이루어지며, 점('.'), 샵('#'), 1부터 nn까지의 숫자로 구성된다. '#'은 장애물 칸이고, '.'은 번호가 붙지 않은 빈 칸이며, 숫자는 번호가 붙은 빈 칸이다. 1부터 nn까지의 각 숫자는 정확히 한 번씩 나타나야 한다. 각 숫자는 가장 아래 층에 있거나 장애물 위에 있어야 한다. 장애물은 공중에 떠 있어도 된다(장애물에는 중력이 없다).

필드의 부피 x×y×zx \times y \times z는 10610^6을 넘으면 안 된다. 입력으로 주어지는 어떤 그래프에 대해서도 이 제한 안에 드는 올바른 필드가 존재함이 보장된다.

힌트

1번 칸에서 4번 칸으로는 올라갈 수 있다. 하지만 천장 장애물 때문에 2번 칸에서 1번 칸으로는 올라갈 수 없다.

예제1

  1. 예제 1

    입력
    4
    0 1 0 1
    0 0 1 0
    0 1 0 0
    1 0 0 0
    
    예상 출력
    4 2 3
    ..#.
    .4..
    
    ####
    1#.#
    
    ..3.
    #2..