아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

인접한 변

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

요약
여러 삼각형 메시를 읽고 각 꼭짓점에 처음 나타난 순서로 번호를 붙인 뒤, 각 삼각형의 세 변에 대해 그 변을 공유하는 이웃 삼각형의 나머지 꼭짓점을 출력하고 이웃이 없으면 X를 출력한다.
난이도

보통10점 중 6점

유형
해시맵, 기하, 구현, 문자열
정답자
아직 제출이 없습니다

문제

삼각형의 인접 관계는 컴퓨터 그래픽스에서 자주 등장하는 문제입니다. 모델링 소프트웨어는 3차원 모델을 삼각형의 목록으로 출력하는 경우가 많습니다. 예를 들어 아래 그림의 정사면체는 삼각형 모양의 면 4개로 이루어져 있습니다. 각 삼각형은 세 꼭짓점의 좌표로 표현되며, 입체를 바로 바깥에서 바라보는 관찰자의 시점에서 시계 방향 순서로 나열됩니다. 정확한 파일 형식은 아래 입력 부분에서 설명합니다.

이 표현만으로도 많은 용도에는 충분하지만, 일부 그래픽스 알고리즘은 어떤 삼각형들이 서로 인접해 있는지, 즉 어떤 삼각형들이 변을 공유하는지 알아야 합니다. 여기서 여러분이 할 일은 주어진 각 모델에 대해 이 정보를 계산하는 것입니다. 인접한 삼각형을 계산하는 과정을 통해, 모든 삼각형의 모든 변이 다른 삼각형의 변 하나와 정확히 짝을 이루는지 확인할 수도 있습니다. 이는 모델이 빈틈이나 구멍 없이 완전히 닫힌 껍질을 이루는지 검사하는 한 가지 방법입니다.

모델의 어떤 면이든 최대 세 개의 인접 삼각형을 가질 수 있으며, 각각과 변 하나씩을 공유합니다. 올바르게 구성된 모델에서 모든 변은 정확히 두 삼각형에 나타나며, 공유되는 변의 두 끝점은 두 삼각형 각각을 시계 방향으로 돌 때 서로 반대 순서로 나타납니다.

꼭짓점이 입력에 주어진 순서대로 V0V_0, V1V_1, V2V_2인 삼각형을 생각해 봅시다. 이 삼각형의 세 변은 V0V1V_0V_1, V1V2V_1V_2, V2V0V_2V_0입니다. V0V1V_0V_1 변을 공유하는 삼각형의 나머지 꼭짓점을 V3V_3, V1V2V_1V_2 변을 공유하는 삼각형의 나머지 꼭짓점을 V4V_4, V2V0V_2V_0 변을 공유하는 삼각형의 나머지 꼭짓점을 V5V_5라고 합시다. 각 삼각형에 대해 V0,V1,V2,V3,V4,V5V_0, V_1, V_2, V_3, V_4, V_5를 출력합니다. 어떤 변을 따라 이웃한 삼각형이 없으면, 그 꼭짓점 번호 자리에 대문자 X를 출력합니다.

입력

입력에는 여러 개의 3차원 모델이 들어 있습니다. 각 모델의 첫 줄은 정수 TT (1≤T≤4000001 \le T \le 400000) 하나로, 그 모델에 있는 삼각형의 개수입니다. 이어서 3T3T개의 줄이 나오는데(삼각형 하나당 세 줄), 각 줄에는 한 꼭짓점의 xx, yy, zz 좌표가 쉼표와 공백으로 구분되어 주어집니다. 각 삼각형의 세 꼭짓점은 시계 방향 순서로 나열됩니다.

좌표는 지수 표기를 포함한 부동소수점 값일 수 있으므로 정수라고 가정해서는 안 됩니다. 같은 꼭짓점이 여러 번 나타날 때는 항상 완전히 동일한 문자열로 적혀 있으며, 서로 다른 두 꼭짓점은 단정밀도(32비트) 부동소수점으로 나타냈을 때 서로 다르다는 것이 보장됩니다. 모든 좌표는 −2-2 이상 22 이하의 범위에 있습니다.

입력은 TT 자리에 0 하나만 있는 줄로 끝납니다.

출력

각 모델 안에서, 서로 다른 꼭짓점에 그 모델의 입력에 처음 등장하는 순서대로 00번부터(00, 그다음 11, 22, 33, …) 번호를 매깁니다. 출력에는 좌표 값 대신 이 꼭짓점 번호를 사용하며, 번호 매기기는 모델마다 다시 00부터 시작합니다.

모델은 읽은 순서대로 출력합니다. 연속한 두 모델 사이는 빈 줄 하나로 구분하되, 첫 모델 앞이나 마지막 모델 뒤에는 빈 줄을 출력하지 않습니다. 각 모델에 대해 삼각형 하나당 한 줄씩(총 TT줄), 삼각형을 읽은 순서 그대로 출력합니다.

각 삼각형 줄의 형식은 다음과 같습니다.

i: V0 V1 V2 V3 V4 V5

여기서 ii는 삼각형의 번호(0,1,2,…0, 1, 2, \dots)이며 그 뒤에 콜론과 공백이 옵니다. V0,V1,V2V_0, V_1, V_2는 그 삼각형 자신의 꼭짓점 번호를 입력 순서대로 나열한 것이고, V3,V4,V5V_3, V_4, V_5는 각각 변 V0V1V_0V_1, V1V2V_1V_2, V2V0V_2V_0을 따라 인접한 삼각형의 나머지 꼭짓점입니다. 이웃이 없는 경우에는 대문자 X를 출력합니다. 한 줄 안의 모든 값은 공백 하나로 구분합니다.

예제3

  1. 예제 1

    입력
    4
    0, 2, 0
    1, -1, -1
    1, -1, 1
    0, 2, 0
    -2, -1, 0
    1, -1, -1
    0, 2, 0
    1, -1, 1
    -2, -1, 0
    1, -1, -1
    -2, -1, 0
    1, -1, 1
    2
    0, 2, 0
    1, -1, -1
    1, -1, 1
    0, 2, 0
    -2, -1, 0
    1, -1, -1
    0
    
    예상 출력
    0: 0 1 2 3 3 3
    1: 0 3 1 2 2 2
    2: 0 2 3 1 1 1
    3: 1 3 2 0 0 0
    
    0: 0 1 2 3 X X
    1: 0 3 1 X X 2
    
  2. 예제 2

    입력
    1
    0, 0, 0
    1, 0, 0
    0, 1, 0
    0
    
    예상 출력
    0: 0 1 2 X X X
    
  3. 예제 3

    입력
    2
    0, 2, 0
    1, -1, -1
    1, -1, 1
    0, 2, 0
    -2, -1, 0
    1, -1, -1
    0
    
    예상 출력
    0: 0 1 2 3 X X
    1: 0 3 1 X X 2