← Home
```go
package main

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

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
	}
	xs := make([]int64, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &xs[i])
	}
	sort.Slice(xs, func(i, j int) bool { return xs[i] < xs[j] })

	eps := 1e-9

	needSeg := func(d float64) int {
		i := 0
		used := 0
		for i < n {
			used++
			limit := float64(xs[i]) + 2*d + eps
			j := i
			for j < n && float64(xs[j]) <= limit {
				j++
			}
			i = j
		}
		return used
	}

	low, high := 0.0, 1e9
	for it := 0; it < 70; it++ {
		mid := (low + high) / 2
		if needSeg(mid) <= 3 {
			high = mid
		} else {
			low = mid
		}
	}

	// Round d up to 6 decimals to ensure feasibility with printed value
	dOut := math.Ceil(high*1e6-1e-12) / 1e6

	centers := func(d float64) []float64 {
		i := 0
		cs := make([]float64, 0, 3)
		for i < n && len(cs) < 3 {
			start := float64(xs[i])
			center := start + d
			limit := start + 2*d + eps
			for i < n && float64(xs[i]) <= limit {
				i++
			}
			cs = append(cs, center)
		}
		for len(cs) < 3 {
			cs = append(cs, cs[0])
		}
		return cs[:3]
	}(dOut)

	fmt.Fprintf(out, "%.6f\n", dOut)
	fmt.Fprintf(out, "%.6f %.6f %.6f\n", centers[0], centers[1], centers[2])
}
```