테이블 평탄화

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

문제

중첩된 HTML 테이블로 표현된 화면 배치를, 같은 위치 관계를 유지하는 하나의 HTML 테이블로 바꾸어야 한다.

이 문제에서 다루는 HTML은 매우 작은 부분집합이다. 문서는 <body>로 시작하고 </body>로 끝나며, 그 사이에는 한 줄에 하나씩 테이블이 들어온다. 테이블은 <table></table> 사이에 하나 이상의 행을 가지며, 각 행은 <tr></tr> 사이에 하나 이상의 셀을 가진다. 셀의 내용은 영문자와 숫자로 이루어진 텍스트 하나이거나 또 다른 테이블 하나이다.

일반적인 테이블에서는 위쪽이나 왼쪽의 셀이 여러 칸을 차지하면 그 영역에 해당하는 셀 태그가 생략될 수 있다. 하지만 입력으로 주어지는 배치용 테이블의 셀 시작 태그는 항상 <td>이며, 행 또는 열 병합 속성을 사용하지 않는다. 대신 셀 안에 테이블을 넣어 배치를 만든다.

하나의 테이블 안에서 중첩 테이블은 같은 행에 둘 이상 나타나지 않고, 같은 열에도 둘 이상 나타나지 않는다. 중첩 깊이는 여러 단계가 될 수 있다.

각 입력 테이블을 중첩 테이블이 전혀 없는 하나의 테이블로 변환하라. 필요한 경우 rowspancolspan을 추가하여, 원래 중첩 배치와 같은 행과 열의 위치 관계를 표현해야 한다. 셀의 실제 크기나 모양은 고려하지 않는다.

입력과 출력

입력은 첫 줄의 <body>로 시작하고, 마지막 줄의 </body>로 끝난다. 그 사이의 각 줄에는 하나의 중첩 테이블 배치가 들어온다.

각 테이블 줄의 길이는 10,000자를 넘지 않는다. 테이블 줄은 <table>, <tr>, <td>, </td>, </tr>, </table>, 그리고 영문자와 숫자로만 이루어진 텍스트 토큰으로 구성되며, 유효한 테이블을 이룬다.

입력 테이블에는 행 또는 열 병합 속성이 없지만 중첩 테이블은 있을 수 있다. 중첩 깊이는 최대 10이다. 평탄화한 결과 테이블은 최소 1행 1열, 최대 100행 100열이다. 각 텍스트 토큰의 길이는 100자를 넘지 않는다.

출력은 첫 줄에 <body>, 마지막 줄에 </body>를 출력한다. 그 사이에는 입력의 각 테이블 줄에 대응하는 평탄화된 테이블을 한 줄씩 출력한다.

출력 테이블은 유효한 테이블이어야 하며, 셀 내용에는 텍스트만 올 수 있고 중첩 테이블은 올 수 없다. 모든 태그는 소문자로 출력한다. 행 또는 열 병합이 필요한 셀은 rowspan="NUMBER", colspan="NUMBER" 형식을 사용하며, 두 속성이 모두 필요하면 이 순서로 출력한다. 속성값이 1이면 해당 속성은 출력하지 않는다.