```go
package main
import (
"fmt"
"math/bits"
)
func main() {
var n int
if _, err := fmt.Scan(&n); err != nil {
return
}
strings := make([]string, n)
for i := 0; i < n; i++ {
fmt.Scan(&strings[i])
}
if n == 1 {
fmt.Printf("%.15f\n", 0.0)
return
}
m := len(strings[0])
V := make([]uint64, 1<<m)
for i := 0; i < n; i++ {
for j := i + 1; j < n; j++ {
eq := 0
for k := 0; k < m; k++ {
if strings[i][k] == strings[j][k] {
eq |= (1 << k)
}
}
V[eq] |= (uint64(1) << i) | (uint64(1) << j)
}
}
for i := 0; i < m; i++ {
for mask := (1 << m) - 1; mask >= 0; mask-- {
if (mask & (1 << i)) != 0 {
V[mask^(1<<i)] |= V[mask]
}
}
}
C := make([][]float64, m+1)
for i := 0; i <= m; i++ {
C[i] = make([]float64, m+1)
C[i][0] = 1
for j := 1; j <= i; j++ {
C[i][j] = C[i-1][j-1] + C[i-1][j]
}
}
sumBadCount := make([]int, m+1)
for mask := 0; mask < (1<<m); mask++ {
k := bits.OnesCount32(uint32(mask))
sumBadCount[k] += bits.OnesCount64(V[mask])
}
ans := 0.0
for k := 0; k <= m; k++ {
ans += float64(sumBadCount[k]) / (float64(n) * C[m][k])
}
fmt.Printf("%.15f\n", ans)
}
```