도시 계획

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

요약
주어진 도달 가능성 행렬과 일치하는 가장 작은 일방통행 도로망을 상호 도달 그룹 내부 순환과 그룹 사이 직접 간선으로 복원합니다.
난이도

보통10점 중 4점

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

문제

경기도의 한 도시가 새 구역을 지어 도시를 넓히려고 한다. 도시는 여러 건축가를 불렀고, 그중 남서가 도로망 설계를 맡았다. 남서는 일을 줄이려고 구역 안의 지역을 잇는 도로를 모두 일방통행으로 놓았다. 두 지역 AA와 BB는 AA에서 BB로 가는 도로와 BB에서 AA로 가는 도로를 따로 놓아 양쪽으로 이을 수 있다.

설계도를 그려 보니 일방통행 때문에 어떤 지역에서 다른 지역으로 아예 갈 수 없는 경우가 나왔다. 남서는 각 지역 jj마다 jj에서 갈 수 있는 지역을 모두 적은 목록을 종이에 옮겼다. 이 목록을 도로망의 '갈 수 있는 지역 목록'이라고 부른다. AA에서 BB로 가는 길과 BB에서 CC로 가는 길이 있으면 AA의 목록에는 BB와 CC가, BB의 목록에는 CC가 적힌다.

그런데 하드 디스크가 망가져 설계도가 모두 사라졌다. 남은 것은 책상 위의 종이 한 장, 즉 '갈 수 있는 지역 목록'뿐이다.

이 목록만으로 도로망을 되살리려고 한다. 같은 목록을 만드는 도로망은 여러 가지다. 그중 도로가 가장 적은 도로망을 구하여라.

입력

첫 줄에 테스트 케이스의 개수 tt (1≤t≤201 \le t \le 20)가 주어진다. 각 테스트 케이스는 빈 줄로 구분된다.

각 테스트 케이스의 첫 줄에 지역의 개수 nn (1≤n≤3001 \le n \le 300)이 주어진다. 지역에는 1번부터 nn번까지 번호가 붙어 있다. 이어지는 nn개의 줄에는 길이가 nn인 문자열이 한 줄씩 주어진다. ii번째 줄은 지역 ii에서 갈 수 있는 지역을 나타낸다. 이 줄의 jj번째 문자가 0이면 지역 ii에서 지역 jj로 갈 수 없고, 1이면 지역 ii에서 지역 jj로 가는 방법이 하나 이상 있다. 지역 ii에서 지역 ii로는 언제나 갈 수 있으므로 ii번째 줄의 ii번째 문자는 항상 1이다.

주어진 목록을 만드는 도로망이 적어도 하나 존재한다.

출력

각 테스트 케이스마다 도로가 가장 적은 도로망을 출력한다. 그런 도로망은 여러 개일 수 있으므로 다음 규칙으로 정해지는 하나만 출력한다.

먼저 서로 오갈 수 있는 지역끼리 하나의 그룹으로 묶는다. 지역 uu와 vv는 uu에서 vv로 갈 수 있고 vv에서 uu로도 갈 수 있을 때 같은 그룹에 속한다. 그룹에 속한 지역 중 번호가 가장 작은 지역을 그 그룹의 대표라고 하자.

  • 크기가 2 이상인 그룹에서, 속한 지역을 번호가 커지는 순서로 v1,v2,…,vkv_1, v_2, \dots, v_k라 하면 도로 v1→v2v_1 \to v_2, v2→v3v_2 \to v_3, …\dots, vk−1→vkv_{k-1} \to v_k, vk→v1v_k \to v_1을 놓는다. 크기가 1인 그룹 안에는 도로를 놓지 않는다.
  • 서로 다른 두 그룹 AA와 BB에 대해, AA의 지역에서 BB의 지역으로 갈 수 있고, AA에서 갈 수 있으면서 BB로도 갈 수 있는 제3의 그룹 CC가 없으면 AA의 대표에서 BB의 대표로 가는 도로 하나를 놓는다.

첫 줄에 이렇게 놓은 도로의 개수 mm을 출력하고, 이어지는 mm개의 줄에 도로를 한 줄에 하나씩 aia_i bib_i 형식으로 출력한다. 이는 지역 aia_i에서 지역 bib_i로 가는 일방통행 도로를 뜻한다. 도로는 aia_i가 작은 순서로, aia_i가 같으면 bib_i가 작은 순서로 정렬해 출력한다. 이 규칙으로 나오는 도로망의 도로 개수는 최소다.

연속한 두 테스트 케이스의 출력 사이에는 빈 줄을 하나 출력한다.

예제2

  1. 예제 1

    입력
    2
    
    3
    111
    011
    001
    
    4
    1111
    1111
    0011
    0011
    
    예상 출력
    2
    1 2
    2 3
    
    5
    1 2
    1 3
    2 1
    3 4
    4 3
    
  2. 예제 2

    입력
    3
    
    1
    1
    
    2
    10
    01
    
    2
    11
    11
    
    예상 출력
    0
    
    0
    
    2
    1 2
    2 1