public class Euler666 {

    static double extinctionProbability(int k, int m) {
        int n = k * m;
        int[] r = new int[n];
        r[0] = 306;
        for (int i = 1; i < n; ++i) {
            long x = r[i - 1];
            r[i] = (int) ((x * x) % 10007L);
        }

        int[][] cnt = new int[k][5];
        for (int i = 0; i < k; ++i) {
            for (int j = 0; j < m; ++j) {
                int q = r[i * m + j] % 5;
                cnt[i][q]++;
            }
        }

        double[] p = new double[k];
        double[] next = new double[k];

        int maxIter = 1000000;
        double eps = 1e-15;

        for (int iter = 0; iter < maxIter; ++iter) {
            double maxDelta = 0.0;

            for (int i = 0; i < k; ++i) {
                int[] c = cnt[i];
                int a = (2 * i) % k;
                int b = (i * i + 1) % k;
                int d = (i + 1) % k;

                double pi = p[i];
                double pa = p[a];
                double pb = p[b];
                double pd = p[d];

                double val = (c[0] +
                        c[1] * pi * pi +
                        c[2] * pa +
                        c[3] * pb * pb * pb +
                        c[4] * pi * pd) / m;

                next[i] = val;
                double delta = Math.abs(val - pi);
                if (delta > maxDelta) {
                    maxDelta = delta;
                }
            }

            double[] temp = p;
            p = next;
            next = temp;

            if (maxDelta < eps) {
                break;
            }
        }

        return p[0];
    }

    public static String solve() {
        double ans = extinctionProbability(500, 10);
        return String.format(java.util.Locale.US, "%.8f", ans);
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
