← Home
 ```go
package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
	"sort"
	"strconv"
	"strings"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	n, _ := strconv.Atoi(scanner.Text())
	
	points := make([][2]float64, n)
	for i := 0; i < n; i++ {
		scanner.Scan()
		parts := strings.Fields(scanner.Text())
		x, _ := strconv.ParseFloat(parts[0], 64)
		y, _ := strconv.ParseFloat(parts[1], 64)
		points[i] = [2]float64{x, y}
	}
	
	if n < 3 {
		fmt.Println("0.0")
		return
	}
	
	minAngle := 2.0 * math.Pi
	
	for i := 0; i < n; i++ {
		angles := make([]float64, 0, n-1)
		x0, y0 := points[i][0], points[i][1]
		
		for j := 0; j < n; j++ {
			if i == j {
				continue
			}
			dx := points[j][0] - x0
			dy := points[j][1] - y0
			angle := math.Atan2(dy, dx)
			angles = append(angles, angle)
		}
		
		sort.Float64s(angles)
		
		for k := 0; k < len(angles)-1; k++ {
			diff := angles[k+1] - angles[k]
			if diff < minAngle {
				minAngle = diff
			}
		}
		
		diff := 2.0*math.Pi - angles[len(angles)-1] + angles[0]
		if diff < minAngle {
			minAngle = diff
		}
		
		if minAngle < 1e-12 {
			break
		}
	}
	
	fmt.Printf("%.10f\n", minAngle)
}
```