페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#4670
스페셜 저지

Connecting Supertrees 1초 2048MB

문제

Gardens by the Bay는 싱가포르에 있는 공원이다.

이 공원에는 슈퍼트리라는 이름의 n개의 탑이 있다.

이 탑은 0부터 n - 1까지 번호가 매겨져 있다.

우리는 0개 이상의 다리를 지으려고 한다.

각각의 다리는 서로 다른 두 탑을 잇고, 양방향으로 건널 수 있다.

한 쌍의 탑을 잇는 다리는 최대 하나이다.

 

탑 x에서 탑 y로의 경로는 다음 조건을 만족하는 하나 또는 그 이상 탑의 서열이다.

  • 서열의 첫번째 원소는 x이다.

  • 서열의 마지막 원소는 y이다.

  • 동일한 원소가 서열에서 두 번 이상 나오는 경우는 없다.

  • 서열에서 인접한 두 원소 (탑)은 다리 하나로 연결되어 있다.

 

정의에 의해서 탑 하나에서 자기 자신으로 가는 경로의 수는 정확하게 하나이며, 

탑 i에서 탑 j로 가는 경로의 가짓수는 탑 j에서 탑 i로 가는 경로의 가짓수와 같다는데 유의하라.

 

설계를 담당한 책임자는, 다음 조건을 만족하게 다리를 지으려고 한다:

모든 0 ≤ i, j ≤ n - 1에 대해서, 탑 i에서 탑 j로 가는 서로 다른 경로가 정확하게 p(​i, j)가지이다. 0 ≤ p(i, j) ≤ 3이다.

 

설계 요구 사항을 만족하게 다리를 짓거나, 이것이 불가능하다는 것을 판정하는 프로그램을 작성하시오.​ 

 


입력

1번 줄 : n

2번 ~ n + 1번 줄 : p(i,0)​ p(i,1)​ ... p(i,n-1)

- 1 ≤ n ≤ 1 000

- p(i,j) = 1 (0 ≤ i ≤ n - 1)

- p(i,j) = p(j,i)​ (0 ≤ i, j ≤ n - 1)

- 0 ≤ p(i,j)​ ≤ 3 (0 ≤ i, j ≤ n - 1)​ 


출력

만약 요구 사항을 만족하게 다리를 짓는 것이 불가능하다면, 0을 출력한다.

요구 사항을 만족하게 다리를 짓는 것이 가능하다면, 1을 출력한다. 

이후 n개의 줄에 b(i,0), b(i,1)​, ... , b(i,n-1)​을 공백으로 구분하여 출력한다.

b는 n × n 크기 배열로 만약 탑 i와 탑 j를 잇는 다리가 있다면 b(i,j) = 1이고, 그렇지 않다면 b(i,j) = 0이다.​ 


예제1

입력
4

1122
1122
2212
2221
출력
1

0111
1000
1001
1010

출처

IOI 2020 day1 2

역링크