← Home
For problem statement at 1000-1999/1700-1799/1770-1779/1776/problemI.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1770-1779/1776/verifierI.go ends with All tests passed can you fix the verifier? ```go
package main

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

type Pt struct {
	x int64
	y int64
}

var pts []Pt

func area2(a, b, c int) int64 {
	p := pts[a]
	q := pts[b]
	r := pts[c]
	x1 := q.x - p.x
	y1 := q.y - p.y
	x2 := r.x - p.x
	y2 := r.y - p.y
	v := x1*y2 - y1*x2
	if v < 0 {
		v = -v
	}
	return v
}

func removeVertex(cur []int, v int) []int {
	for i, x := range cur {
		if x == v {
			return append(cur[:i], cur[i+1:]...)
		}
	}
	return cur
}

func bestMove(cur []int) int {
	m := len(cur)
	if m <= 3 {
		return cur[0]
	}
	bestVal := int64(1<<62 - 1)
	best := cur[1]

	w := make([]int, m)

	for cut := 0; cut < m; cut++ {
		for i := 0; i < m; i++ {
			w[i] = cur[(cut+i)%m]
		}

		A := w[0]
		B := w[m-1]
		k := m - 2

		odd := make([][]int64, k+2)
		even := make([][]int64, k+2)
		for i := 0; i < k+2; i++ {
			odd[i] = make([]int64, k+2)
			even[i] = make([]int64, k+2)
		}

		for i := 1; i <= k; i++ {
			odd[i][i] = area2(A, w[i], B)
			even[i][i] = 0
		}

		for length := 2; length <= k; length++ {
			for l := 1; l+length-1 <= k; l++ {
				r := l + length - 1

				xLeft := area2(A, w[l], w[l+1])
				oddL := xLeft + even[l+1][r]
				evenL := odd[l+1][r]

				xRight := area2(w[r-1], w[r], B)
				oddR := odd[l][r-1]
				evenR := even[l][r-1]
				if length%2 == 1 {
					oddR += xRight
				} else {
					evenR += xRight
				}

				if oddL < oddR {
					odd[l][r] = oddL
				} else {
					odd[l][r] = oddR
				}
				if evenL < evenR {
					even[l][r] = evenL
				} else {
					even[l][r] = evenR
				}
			}
		}

		if odd[1][k] < bestVal {
			bestVal = odd[1][k]
			best = w[1]
		}
		if even[1][k] < bestVal {
			bestVal = even[1][k]
			best = w[k]
		}
	}

	return best
}

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

	var n int
	if _, err := fmt.Fscan(in, &n); err != nil {
		return
	}

	pts = make([]Pt, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(in, &pts[i].x, &pts[i].y)
	}

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

	helpAlberto := n%2 == 0
	if helpAlberto {
		fmt.Fprintln(out, "Alberto")
	} else {
		fmt.Fprintln(out, "Beatrice")
	}
	out.Flush()

	ourTurn := helpAlberto

	for len(cur) > 2 {
		if ourTurn {
			mv := bestMove(cur)
			fmt.Fprintln(out, mv)
			out.Flush()
			cur = removeVertex(cur, mv)
		} else {
			var mv int
			if _, err := fmt.Fscan(in, &mv); err != nil {
				return
			}
			if mv < 0 {
				return
			}
			cur = removeVertex(cur, mv)
		}
		ourTurn = !ourTurn
	}
}
```