← Home
```go
package main

import (
	"fmt"
)

type Point struct {
	id int
	x  int64
	y  int64
}

func abs(x int64) int64 {
	if x < 0 {
		return -x
	}
	return x
}

func area(p1, p2, p3 Point) int64 {
	return abs((p2.x-p1.x)*(p3.y-p1.y) - (p3.x-p1.x)*(p2.y-p1.y))
}

func main() {
	var n int
	fmt.Scan(&n)

	pts := make([]Point, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&pts[i].x, &pts[i].y)
		pts[i].id = i + 1
	}

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

	getPolygon := func() []Point {
		var poly []Point
		for _, p := range pts {
			if active[p.id] {
				poly = append(poly, p)
			}
		}
		return poly
	}

	isAlberto := (n%2 == 0)
	if isAlberto {
		fmt.Println("Alberto")
	} else {
		fmt.Println("Beatrice")
	}

	target := make(map[int]bool)
	colorChosen := false

	for turns := 0; turns < n-2; turns++ {
		myTurn := (isAlberto && turns%2 == 0) || (!isAlberto && turns%2 == 1)
		poly := getPolygon()

		if !colorChosen && myTurn {
			m := len(poly)
			var sumEven, sumOdd int64
			for i := 0; i < m; i++ {
				p1 := poly[(i-1+m)%m]
				p2 := poly[i]
				p3 := poly[(i+1)%m]
				a := area(p1, p2, p3)
				if i%2 == 0 {
					sumEven += a
				} else {
					sumOdd += a
				}
			}

			if sumEven <= sumOdd {
				for i := 0; i < m; i += 2 {
					target[poly[i].id] = true
				}
			} else {
				for i := 1; i < m; i += 2 {
					target[poly[i].id] = true
				}
			}
			colorChosen = true
		}

		if myTurn {
			m := len(poly)
			bestArea := int64(-1)
			bestIdx := -1

			for i := 0; i < m; i++ {
				if target[poly[i].id] {
					p1 := poly[(i-1+m)%m]
					p2 := poly[i]
					p3 := poly[(i+1)%m]
					a := area(p1, p2, p3)
					if bestArea == -1 || a < bestArea {
						bestArea = a
						bestIdx = poly[i].id
					}
				}
			}
			fmt.Println(bestIdx)
			active[bestIdx] = false
		} else {
			var move int
			fmt.Scan(&move)
			active[move] = false
		}
	}
}
```