For problem statement at 1000-1999/1900-1999/1970-1979/1970/problemB3.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1970-1979/1970/verifierB3.go ends with case 2 failed: wizard 3 distance mismatch: required 2, got 4 (target 2, pos (8,1) -> (6,3))
input:
9
8 7 2 1 9 5 8 3 5
output:
YES
5 5
6 3
8 1
9 1
4 5
2 1
3 3
1 1
7 1
8 8 2 3 4 9 4 5 6exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
type Wizard struct {
id int
a int
x int
y int
p int
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n int
if _, err := fmt.Fscanf(reader, "%d\n", &n); err != nil {
return
}
a := make([]int, n)
wizards := make([]*Wizard, n)
for i := 0; i < n; i++ {
fmt.Fscanf(reader, "%d", &a[i])
wizards[i] = &Wizard{id: i + 1, a: a[i]}
}
sort.Slice(wizards, func(i, j int) bool {
return wizards[i].a > wizards[j].a
})
xPos := make([]int, n)
left := n / 2
right := left + 1
for i := 0; i < n; i++ {
if i%2 == 0 {
if left >= 1 {
xPos[i] = left
left--
} else {
xPos[i] = right
right++
}
} else {
if right <= n {
xPos[i] = right
right++
} else {
xPos[i] = left
left--
}
}
}
xToWizard := make(map[int]*Wizard)
for i := 0; i < n; i++ {
wizards[i].x = xPos[i]
wizards[i].y = 1
xToWizard[xPos[i]] = wizards[i]
}
for i := 0; i < n; i++ {
w := wizards[i]
dLeft := w.x - 1
dRight := n - w.x
D := dLeft
if dRight > D {
D = dRight
}
if w.a <= D {
if w.x-w.a >= 1 {
w.p = xToWizard[w.x-w.a].id
} else {
w.p = xToWizard[w.x+w.a].id
}
} else {
if dLeft >= dRight {
w.p = xToWizard[1].id
} else {
w.p = xToWizard[n].id
}
w.y = 1 + w.a - D
}
}
fmt.Fprintln(writer, "YES")
ansX := make([]int, n+1)
ansY := make([]int, n+1)
ansP := make([]int, n+1)
for i := 0; i < n; i++ {
w := wizards[i]
ansX[w.id] = w.x
ansY[w.id] = w.y
ansP[w.id] = w.p
}
for i := 1; i <= n; i++ {
fmt.Fprintf(writer, "%d %d\n", ansX[i], ansY[i])
}
for i := 1; i <= n; i++ {
if i > 1 {
fmt.Fprint(writer, " ")
}
fmt.Fprint(writer, ansP[i])
}
fmt.Fprintln(writer)
}
```