시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 60 14 11 28.947%

문제

HTML에서 표를 그리려면 태그를 이용해야 한다. 표를 그리는 간단한 표현이 주어졌을 때, 표의 아스키 아트를 만드는 프로그램을 작성하시오.

표는 m × n 그리드로 나타낼 수 있고, 각 칸의 너비는 두 글자, 높이는 한 글자이다. 2 × 3 그리드는 다음과 같이 나타낼 수 있다.

 -- -- --
|11|12|13|
 -- -- --
|21|22|23|
 -- -- --

출력은 2m + 1개의 행으로 이루어져 있고, 각 행은 3n + 1개의 글자로 이루어져 있다. (홀수 행의 앞과 뒤에 들어가는 공백도 포함)

표는 행이나 열 여러 개를 합칠 수 있다. 예를 들어, 칸 11이 두 행을 합치고, 칸 22가 두 열을 합쳤을 때의 아스키 아트는 다음과 같다.

 -- -- --
|11|12|13|
    -- --
|  |22   |
 -- -- --

m과 각 칸이 합친 행과 열의 수가 주어졌을 때, 아스키 아트를 만드는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 행의 수 m이 주어진다. 다음 m개 줄에는 각 칸이 합친 행의 수와 열의 수가 주어진다. 합친 정보는 한 번만 주어지며, 왼쪽 위 칸에서만 주어진다.

한 행을 나타내는데 총 N개의 합친 정보가 필요한 경우, 다음과 같이 주어진다.

N RS1 CS1 ... RSN CSN

RSk 와 CSk 는 1보다 크거나 같고, 9보다 작거나 같은 수이며, 그 칸에 합쳐진 행의 수와 열의 수를 나타낸다. 어떤 행에 이미 이전 행에 합쳐진 칸이 있는 경우에는, 그 행을 나타내는데 필요한 숫자가 더 적을 수도 있다.

입력은 다음과 같은 조건을 만족한다.

  • 행의 수와 열의 수는 1보다 크거나 같고, 9보다 작거나 같다.
  • 모든 행의 열의 개수는 모두 같다.
  • 합치는 정보가 겹치는 경우가 없다.
  • 모든 칸은 어떤 칸에게 합쳐져 있다.

최대 100개의 테스트 케이스가 주어지며, 입력의 마지막은 m = 0으로 나타낸다.

출력

각 테스트 케이스 마다, 입력으로 주어진 표의 아스키 아트를 출력한다. 모든 칸의 왼쪽 위 칸에는 행 번호와 열 번호를 출력한다. 모든 테스트 케이스 사이에는 빈 줄을 출력한다.

아스키 아트를 출력할 때, 줄이 공백으로 끝나는 경우에는 그 공백을 모두 삭제하고 출력해야 한다.

예제 입력

3
2 1 1 1 1
2 1 1 1 1
2 1 1 1 1
3
2 1 1 2 1
1 1 1
2 1 1 1 1
3
1 1 2
2 1 1 1 1
2 1 1 1 1
3
2 2 1 1 2
1 2 2
1 1 1
0

예제 출력

 -- --
|11|12|
 -- --
|21|22|
 -- --
|31|32|
 -- --

 -- --
|11|12|
 --
|21|  |
 -- --
|31|32|
 -- --

 -- --
|11   |
 -- --
|21|22|
 -- --
|31|32|
 -- --

 -- -- --
|11|12   |
    -- --
|  |22   |
 --
|31|     |
 -- -- --

힌트