← Home
For problem statement at 1000-1999/1600-1699/1680-1689/1682/problemE.txt this is a correct solution, but verifier at 1000-1999/1600-1699/1680-1689/1682/verifierE.go ends with case 1 failed: expected "1\n2\n3\n4" got "1 2 3 4"
input:
5 4
3 4 5 1 2
1 3
1 5
1 2
1 4 can you fix the verifier? ```go
package main

import (
	"io"
	"os"
	"strconv"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	readInt := func() int {
		for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
			idx++
		}
		val := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int(data[idx]-'0')
			idx++
		}
		return val
	}

	n := readInt()
	m := readInt()

	nxt := make([]int, n+1)
	prv := make([]int, n+1)
	for i := 1; i <= n; i++ {
		nxt[i] = readInt()
	}
	for i := 1; i <= n; i++ {
		prv[nxt[i]] = i
	}

	deg := make([]int, n+1)
	xorNbr := make([]int, n+1)
	xorEdge := make([]int, n+1)

	for id := 1; id <= m; id++ {
		x := readInt()
		y := readInt()
		deg[x]++
		deg[y]++
		xorNbr[x] ^= y
		xorNbr[y] ^= x
		xorEdge[x] ^= id
		xorEdge[y] ^= id
	}

	alive := make([]bool, n+1)
	for i := 1; i <= n; i++ {
		alive[i] = true
	}

	q := make([]int, 0, n+2*m)
	for i := 1; i <= n; i++ {
		if deg[i] == 1 && prv[i] == xorNbr[i] {
			q = append(q, i)
		}
	}

	ans := make([]int, 0, m)

	for head := 0; head < len(q); head++ {
		v := q[head]
		if !alive[v] || deg[v] != 1 || prv[v] != xorNbr[v] {
			continue
		}

		id := xorEdge[v]
		u := xorNbr[v]
		ans = append(ans, id)

		alive[v] = false
		a := prv[v]
		b := nxt[v]
		nxt[a] = b
		prv[b] = a

		deg[v] = 0
		xorNbr[v] = 0
		xorEdge[v] = 0

		if alive[u] {
			deg[u]--
			xorNbr[u] ^= v
			xorEdge[u] ^= id
			if deg[u] == 1 && prv[u] == xorNbr[u] {
				q = append(q, u)
			}
		}

		if alive[b] && deg[b] == 1 && prv[b] == xorNbr[b] {
			q = append(q, b)
		}
	}

	out := make([]byte, 0, m*8)
	for i, v := range ans {
		if i > 0 {
			out = append(out, ' ')
		}
		out = strconv.AppendInt(out, int64(v), 10)
	}
	out = append(out, '\n')
	os.Stdout.Write(out)
}
```