통계 처리의 어려움

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

여러분의 팀은 국제 기업 ACM(Analytical Calculation Maxims)에 고용되었습니다. ACM은 해마다 다양한 설문을 설계하고 진행합니다. 설문은 여러 개의 질문과, 각 질문마다 고를 수 있는 답변 목록으로 이루어진 간단한 양식입니다. 설문은 전 세계로 배포되고, 현장 요원들이 대상 집단에게 질문합니다. 모든 답변은 ICPC(International Computation and Processing Center)로 모이며, 분석가 팀이 원자료에서 의미 있는 상관관계를 찾습니다. 하나의 설문에 대한 원자료는 여러 줄로 이루어지고, 각 줄은 질문받은 한 사람에 대응하며 그 사람이 각 질문에 답한 답변을 담고 있습니다.

여러분이 자동화해야 하는 분석의 첫 단계는, 관심 있는 두 질문의 답변 사이의 상관관계를 나타내는 교차표(cross table)를 만드는 것입니다. 가장 단순한 형태에서 교차표는 첫 번째 질문의 각 답변마다 한 행을, 두 번째 질문의 각 답변마다 한 열을 가집니다. 각 칸에는 두 질문의 해당 답변을 동시에 담고 있는 원자료 줄의 개수가 들어갑니다.

여러분의 과제는 이보다 복잡합니다. 단순한 교차표 값뿐 아니라, 각 행과 각 열의 합계(그 행이나 열의 값들의 합)를 추가된 마지막 열과 마지막 행에 출력해야 하고, 각 행과 각 열의 백분율 분포도 출력해야 합니다. 어떤 칸의 행 기준 백분율은 그 칸의 값이 그 행의 합계에서 차지하는 비율(퍼센트)이며, 다만 행의 합계가 0이면 그 행의 행 기준 백분율은 정의되지 않습니다. 열 기준 백분율도 열의 합계를 이용하여 같은 방식으로 정의됩니다. 따라서 각 칸에는 최대 세 개의 숫자, 즉 값 자체, 행 기준 백분율, 열 기준 백분율이 표시됩니다. 백분율은 합계에도 적용됩니다. 마지막(합계) 열에서 행 기준 백분율은 항상 100%이며(행의 합계가 0이면 정의되지 않음), 열 기준 백분율은 그 행의 합계가 전체 줄 수의 총합계(오른쪽 아래 칸의 값)에서 차지하는 비율을 나타냅니다.

출력 시 백분율은 다음의 결정적 규칙에 따라 정수로 반올림합니다. 각 정확한 백분율을 계산한 뒤 그 내림값(그 값보다 크지 않은 가장 큰 정수)을 취합니다. 합이 100%가 되어야 하는 백분율 묶음을 생각합니다. 행 기준 백분율에서는 합계 열을 제외한 한 행이, 열 기준 백분율에서는 합계 행을 제외한 한 열이 그 묶음입니다. 묶음의 내림값들의 합이 100k100 - k이면(즉 kk만큼 부족하면), 소수 부분이 0이 아닌 칸들 중에서 마지막 kk개의 칸에 정확히 1씩 더합니다. 이때 행에서는 왼쪽에서 오른쪽으로, 열에서는 위에서 아래로 살펴봅니다. 이미 정수인 백분율은 그대로 출력합니다. 해당 합계가 0이면 그 묶음의 모든 백분율은 정의되지 않습니다.

입력

입력은 설문 설명, 설문 결과, 교차표 설명의 세 부분으로 이루어집니다.

첫 줄은 설문 이름이며 최대 100자입니다. 이어지는 줄들은 질문을 설명합니다. 한 질문의 첫 줄은 3글자 질문 코드(대문자와 숫자만 사용), 공백 한 칸, 그리고 질문 이름(최대 80자)으로 이루어집니다. 그 질문의 답변을 설명하는 각 줄은 공백 한 칸으로 시작하고, 이어서 한 글자 답변 코드(대문자, 숫자, 또는 문자 ., *, @ 중 하나), 공백 한 칸, 그리고 답변 설명(최대 40자)이 옵니다. 질문 목록은 문자 # 하나만 있는 줄로 끝납니다. 답변 코드는 한 질문 안에서 서로 다르고, 질문 코드는 입력 전체에서 서로 다릅니다. 각 질문의 답변은 2개 이상 10개 이하이며, 질문은 2개 이상 100개 이하입니다.

다음 줄들은 설문 결과입니다. 각 줄은 질문이 나온 순서대로 질문마다 한 글자씩, 그 사람이 각 질문에 답한 답변 코드를 구분자 없이 담습니다. 이 부분은 문자 # 하나만 있는 줄로 끝납니다. 결과 줄은 최소 한 줄 있으며, 기록된 답변의 총 개수(결과 줄 수 × 질문 수)는 최대 10000입니다.

다음 줄들은 만들 교차표를 설명합니다. 각 설명은 한 줄로, 첫 번째 질문의 코드, 공백 한 칸, (서로 다른) 두 번째 질문의 코드, 공백 한 칸, 그리고 교차표 이름(최대 100자)으로 이루어집니다. 이 부분은 문자 # 하나만 있는 줄로 끝납니다. 교차표 설명은 최대 100개입니다.

어떤 줄에도 끝에 공백이 없습니다. 어떤 이름도 공백으로 시작하거나 끝나지 않지만, 이름 안에는 공백이 있을 수 있습니다.

출력

각 교차표 설명에 대해, 입력에 나온 순서대로 그 교차표를 출력에 씁니다.

교차표의 첫 줄에는 설문 이름, 공백 한 칸, -(붙임표), 공백 한 칸, 그리고 교차표 이름을 씁니다. 그다음 첫 번째 질문의 설명과 두 번째 질문의 설명을 입력에 나온 것과 똑같은 형식으로 그대로 씁니다. 이어서 빈 줄 하나를 쓰고, 그다음 표 자체를 씁니다.

표는 정확히 1+3×(N1+1)1 + 3 \times (N_1 + 1)개의 줄로 이루어지고, 모든 줄은 정확히 6×(N2+2)6 \times (N_2 + 2)개의 문자로 이루어집니다. 여기서 N1N_1은 첫 번째 질문의 답변 개수, N2N_2는 두 번째 질문의 답변 개수입니다.

표에는 제목 줄 하나와, 각각 3줄로 이루어진 N1+1N_1 + 1개의 행이 있습니다. 처음 N1N_1개의 행은 입력 순서대로 첫 번째 질문의 답변에 대응하고, 마지막 행은 열 합계입니다. 표에는 N2+2N_2 + 2개의 열이 있고 각 열의 너비는 6문자입니다. 첫 번째 열은 행 제목을 담고, 이어지는 N2N_2개의 열은 입력 순서대로 두 번째 질문의 답변에 대응하며, 마지막 열은 행 합계를 담습니다. 모든 칸의 내용(제목 포함)은 오른쪽에 맞추고 왼쪽을 공백으로 채워 정확히 6문자 너비로 만듭니다.

첫 번째 열의 제목은 비어 있습니다. 이어지는 N2N_2개 열의 제목은 두 번째 질문의 코드, :(콜론), 그리고 해당 답변 코드로 이루어집니다. 마지막 열의 제목은 TOTAL입니다. 처음 N1N_1개 행의 제목은 첫 번째 질문의 코드, :(콜론), 그리고 해당 답변 코드로 이루어지고, 마지막 행의 제목은 TOTAL입니다. 행 제목은 그 행의 세 줄 중 첫 줄에 오고, 나머지 두 줄에서는 제목 열이 비어 있습니다.

제목이 아닌 각 칸에서 첫 줄에는 교차표 값을, 둘째 줄에는 행 기준 백분율을, 셋째 줄에는 열 기준 백분율을 씁니다. 각 백분율은 반올림한 정수 뒤에 반드시 % 문자를 붙여 쓰거나, 그 백분율이 정의되지 않으면 -(붙임표) 하나만 씁니다.

출력에서 연속한 교차표는 빈 줄 하나로 구분합니다.