Use this to learn the idea, then write your own version.
1package main2 3import (4 "bufio"5 . "fmt"6 "io"7)8 910func Sol1255C(reader io.Reader, writer io.Writer) {11 in := bufio.NewReader(reader)12 out := bufio.NewWriter(writer)13 defer out.Flush()14 orderP3 := [6][3]int{{0, 1, 2}, {0, 2, 1}, {1, 0, 2}, {1, 2, 0}, {2, 0, 1}, {2, 1, 0}}15 16 var n int17 Fscan(in, &n)18 mp := make(map[[2]int][]int, 6*(n-2))19 q := make([][3]int, n-2)20 for i := range q {21 Fscan(in, &q[i][0], &q[i][1], &q[i][2])22 for j, order := range orderP3 {23 pair := [2]int{q[i][order[0]], q[i][order[1]]}24 mp[pair] = append(mp[pair], 6*i+j)25 }26 }27 28 g := make([][]int, 6*(n-2))29 inDeg := make([]int, len(g))30 for i, qi := range q {31 for j, order := range orderP3 {32 if ws, ok := mp[[2]int{qi[order[1]], qi[order[2]]}]; ok {33 v := 6*i + j34 for _, w := range ws {35 if w/6 != i {36 g[v] = append(g[v], w)37 inDeg[w]++38 }39 }40 }41 }42 }43 44 fa := make([]int, len(inDeg)) 45 for i := range fa {46 fa[i] = -147 }48 var end int49 queue := []int{}50 vOrder := make([]int, len(inDeg))51 for i, deg := range inDeg {52 if deg == 0 {53 queue = append(queue, i)54 }55 }56 for len(queue) > 0 {57 var v int58 v, queue = queue[0], queue[1:]59 for _, w := range g[v] {60 inDeg[w]--61 if inDeg[w] == 0 {62 queue = append(queue, w)63 vOrder[w] = vOrder[v] + 164 if vOrder[w] == n-3 {65 end = w 66 }67 fa[w] = v 68 }69 }70 }71 vs := make([]int, 0, n-2)72 for v := end; v != -1; v = fa[v] {73 vs = append(vs, v) 74 }75 76 v := vs[len(vs)-1]77 q0, order0 := q[v/6], orderP3[v%6]78 Fprint(out, q0[order0[0]], q0[order0[1]])79 for i := len(vs) - 1; i >= 0; i-- {80 v = vs[i]81 qv, orderV := q[v/6], orderP3[v%6]82 Fprint(out, " ", qv[orderV[2]])83 }84}85 86878889