```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)
}
```