← Home
For problem statement at 1000-1999/1500-1599/1580-1589/1583/problemD.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1580-1589/1583/verifierD.go ends with Problem D is interactive and cannot be automatically verified. can you fix the verifier?  ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var n int
	fmt.Fscan(reader, &n)

	next := make([]int, n)
	for i := 0; i < n; i++ {
		a := make([]int, n)
		for j := 0; j < n; j++ {
			if j == i {
				a[j] = 2
			} else {
				a[j] = 1
			}
		}
		fmt.Fprint(writer, "? ")
		for j := 0; j < n; j++ {
			fmt.Fprint(writer, a[j])
			if j < n-1 {
				fmt.Fprint(writer, " ")
			}
		}
		fmt.Fprintln(writer)
		writer.Flush()

		var res int
		fmt.Fscan(reader, &res)
		if res == 0 {
			next[i] = -1
		} else {
			next[i] = res - 1
		}
	}

	prev := make([]int, n)
	for i := 0; i < n; i++ {
		a := make([]int, n)
		for j := 0; j < n; j++ {
			if j == i {
				a[j] = 1
			} else {
				a[j] = 2
			}
		}
		fmt.Fprint(writer, "? ")
		for j := 0; j < n; j++ {
			fmt.Fprint(writer, a[j])
			if j < n-1 {
				fmt.Fprint(writer, " ")
			}
		}
		fmt.Fprintln(writer)
		writer.Flush()

		var res int
		fmt.Fscan(reader, &res)
		if res == 0 {
			prev[i] = -1
		} else {
			prev[i] = res - 1
		}
	}

	p := make([]int, n)
	cur := 0
	for i := 0; i < n; i++ {
		if next[i] == -1 {
			p[i] = n
			cur = i
			break
		}
	}

	for val := n; val >= 2; val-- {
		if prev[cur] != -1 && prev[cur] < cur {
			cur = prev[cur]
		} else {
			for k := 0; k < n; k++ {
				if next[k] == cur && k > cur {
					cur = k
					break
				}
			}
		}
		p[cur] = val - 1
	}

	fmt.Fprint(writer, "! ")
	for i := 0; i < n; i++ {
		fmt.Fprint(writer, p[i])
		if i < n-1 {
			fmt.Fprint(writer, " ")
		}
	}
	fmt.Fprintln(writer)
	writer.Flush()
}
```