Chiếc bánh bị cắt

Đề bài

Mô tả

Một chiếc bánh có hình dạng đa giác lồi n đỉnh. Các đỉnh của nó được đánh số bởi n số nguyên phân biệt từ 1 đến n, nhưng thứ tự đánh số là hoàn toàn tùy ý: đi vòng quanh đa giác, các số hiệu không nhất thiết tăng dần.

Chiếc bánh được cắt thành n2 miếng tam giác theo quy tắc sau. Mỗi lần cắt, ta chọn ba đỉnh liên tiếp của đa giác hiện tại và cắt rời tam giác tạo bởi ba đỉnh đó ra khỏi bánh; phần bánh còn lại vẫn phải là một đa giác lồi. Sau đúng n2 lần cắt như vậy, chiếc bánh được chia hết thành các miếng tam giác.

Bạn nhận được n2 miếng tam giác theo thứ tự ngẫu nhiên. Mỗi miếng được mô tả bởi số hiệu ba đỉnh của nó, cũng theo thứ tự ngẫu nhiên. Nhiệm vụ của bạn là khôi phục lại:

  • một hoán vị p1,p2,,pn của 1,2,,n — số hiệu các đỉnh của đa giác khi đi vòng quanh nó (theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ đều được);
  • một hoán vị q1,q2,,qn2 của 1,2,,n2 — thứ tự cắt các miếng, trong đó qi là số hiệu của miếng được cắt ở lần thứ i (miếng được đánh số theo thứ tự xuất hiện trong dữ liệu vào).

sao cho nếu đa giác có thứ tự đỉnh là p thì việc cắt lần lượt các miếng q1,q2,,qn2 luôn hợp lệ: mỗi lần cắt tách ra đúng một miếng tam giác và phần còn lại luôn là một đa giác lồi.

Dữ liệu đảm bảo luôn tồn tại đáp án. Nếu có nhiều đáp án, in ra một đáp án bất kì.

Dữ liệu vào

  • Dòng đầu tiên chứa một số nguyên t — số bộ dữ liệu.
  • Với mỗi bộ dữ liệu:
    • Dòng đầu chứa một số nguyên n — số đỉnh của chiếc bánh.
    • n2 dòng tiếp theo, dòng thứ i chứa ba số nguyên đôi một khác nhau a,b,c — số hiệu ba đỉnh của miếng thứ i.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra hai dòng:

  • Dòng thứ nhất chứa n số nguyên phân biệt p1,p2,,pn.
  • Dòng thứ hai chứa n2 số nguyên phân biệt q1,q2,,qn2.

Ràng buộc

  • 1t1000
  • 3n105
  • 1a,b,cn
  • Tổng n trên tất cả các bộ dữ liệu không vượt quá 105

Ví dụ

Input Output Giải thích
3
6
3 6 5
5 2 4
5 4 6
6 3 1
6
2 5 6
2 5 1
4 1 2
1 3 5
3
1 2 3
1 3 5 2 4 6
2 3 1 4
1 4 2 6 5 3
1 3 2 4
1 2 3
1
Bộ thứ nhất: đa giác theo thứ tự 1, 3, 5, 2, 4, 6. Cắt miếng 2 = (5, 2, 4) trước, bỏ đỉnh 2; rồi miếng 3 = (5, 4, 6), bỏ đỉnh 4; rồi miếng 1 = (3, 6, 5), bỏ đỉnh 5; còn lại đúng miếng 4 = (6, 3, 1). Mọi phép quay vòng hoặc đảo chiều của p đều được chấp nhận.
3
3
3 1 2
4
1 3 4
3 4 2
5
2 1 3
2 3 4
2 1 5
1 3 2
1
1 3 2 4
2 1
1 3 4 2 5
3 1 2
Với n=3 chỉ có một miếng duy nhất và ba đỉnh chính là cả chiếc bánh. Bộ thứ ba: cạnh (1,2)(2,3) mỗi cạnh nằm trong hai miếng nên chúng là đường cắt bên trong, các cạnh còn lại là cạnh của đa giác và ghép thành chu trình 1, 3, 4, 2, 5.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 csc 6.12.0.200 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 kotlinc 2.4.10 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0