Use this to learn the idea, then write your own version.
1package main2 3import (4 "bufio"5 . "fmt"6 "io"7 "sort"8)9 1011func CF1282E(_r io.Reader, _w io.Writer) {12 in := bufio.NewReader(_r)13 out := bufio.NewWriter(_w)14 defer out.Flush()15 type pr struct{ x, y int }16 sort3 := func(a ...int) (x, y, z int) { sort.Ints(a); return a[0], a[1], a[2] }17 18 var T, n, x, y, z int19 for Fscan(in, &T); T > 0; T-- {20 Fscan(in, &n)21 id := make([]map[pr]int, n)22 for i := range id {23 id[i] = map[pr]int{}24 }25 cnt := make([]int, n)26 for i := 1; i < n-1; i++ {27 Fscan(in, &x, &y, &z)28 x, y, z = sort3(x-1, y-1, z-1)29 id[x][pr{y, z}] = i30 id[y][pr{x, z}] = i31 id[z][pr{x, y}] = i32 cnt[x]++33 cnt[y]++34 cnt[z]++35 }36 if n == 3 {37 Fprintln(out, 1, 2, 3)38 Fprintln(out, 1)39 continue40 }41 42 ans := make([]int, 0, n-2)43 g := make([][]int, n)44 inner := map[pr]bool{}45 add := func(v, w int) {46 if v > w {47 v, w = w, v48 }49 if !inner[pr{v, w}] {50 g[v] = append(g[v], w)51 g[w] = append(g[w], v)52 }53 }54 q := []int{}55 for i, c := range cnt {56 if c == 1 {57 q = append(q, i)58 }59 }60 for n -= 2; n > 0; n-- {61 x := q[0]62 q = q[1:]63 p, i := pr{}, 064 for p, i = range id[x] {65 break66 }67 ans = append(ans, i)68 69 y, z := p.x, p.y70 if cnt[y]--; cnt[y] == 1 {71 q = append(q, y)72 }73 if cnt[z]--; cnt[z] == 1 {74 q = append(q, z)75 }76 77 add(x, y)78 add(x, z)79 inner[p] = true80 81 x, y, z = sort3(x, y, z)82 delete(id[x], pr{y, z})83 delete(id[y], pr{x, z})84 delete(id[z], pr{x, y})85 }86 fa, v := -1, 087 for {88 Fprint(out, v+1, " ")89 for _, w := range g[v] {90 if w != fa {91 fa, v = v, w92 break93 }94 }95 if v == 0 {96 break97 }98 }99 Fprintln(out)100 for _, v := range ans {101 Fprint(out, v, " ")102 }103 Fprintln(out)104 }105}106 107108