public class Euler213 {
    public static void main(String[] args) {
        int size = 30, steps = 50, cells = size * size;
        int[][] neighbors = new int[cells][];
        for (int r = 0; r < size; r++)
            for (int c = 0; c < size; c++) {
                int idx = r * size + c;
                java.util.List<Integer> nb = new java.util.ArrayList<>();
                if (r > 0)
                    nb.add((r - 1) * size + c);
                if (r < size - 1)
                    nb.add((r + 1) * size + c);
                if (c > 0)
                    nb.add(r * size + c - 1);
                if (c < size - 1)
                    nb.add(r * size + c + 1);
                neighbors[idx] = nb.stream().mapToInt(Integer::intValue).toArray();
            }
        double[] emptyProb = new double[cells];
        java.util.Arrays.fill(emptyProb, 1.0);
        double[] dist = new double[cells], next = new double[cells];
        for (int start = 0; start < cells; start++) {
            java.util.Arrays.fill(dist, 0.0);
            dist[start] = 1.0;
            for (int s = 0; s < steps; s++) {
                java.util.Arrays.fill(next, 0.0);
                for (int i = 0; i < cells; i++) {
                    if (dist[i] == 0.0)
                        continue;
                    double share = dist[i] / neighbors[i].length;
                    for (int nb : neighbors[i])
                        next[nb] += share;
                }
                double[] tmp = dist;
                dist = next;
                next = tmp;
            }
            for (int i = 0; i < cells; i++)
                emptyProb[i] *= (1.0 - dist[i]);
        }
        double sum = 0;
        for (double p : emptyProb)
            sum += p;
        System.out.printf("%.6f%n", sum);
    }
}
