import java.util.HashMap;

public class Euler856 {

    static class Solver {
        int ranks;
        int copies;
        int base;
        HashMap<Long, Double> memo;

        Solver(int ranks, int copies) {
            this.ranks = ranks;
            this.copies = copies;
            this.base = ranks + 1;
            this.memo = new HashMap<>();
        }

        double expectedDraws() {
            if (ranks <= 0 || copies <= 0)
                return 0.0;
            int[] a = new int[copies + 1];
            if (ranks >= 1)
                a[copies] = ranks - 1;
            int m = copies - 1;
            memo.clear();
            return 1.0 + dfs(m, a);
        }

        long encode(int m, int[] a) {
            long key = m;
            for (int v : a) {
                key = key * base + v;
            }
            return key;
        }

        double dfs(int m, int[] a) {
            int remaining = m;
            for (int i = 1; i <= copies; ++i) {
                remaining += i * a[i];
            }
            if (remaining == 0)
                return 0.0;

            long key = encode(m, a);
            if (memo.containsKey(key))
                return memo.get(key);

            double ans = 1.0;
            for (int i = 1; i <= copies; ++i) {
                if (a[i] == 0)
                    continue;
                double p = (double) (i * a[i]) / remaining;
                int[] b = a.clone();
                b[i]--;
                b[m]++;
                ans += p * dfs(i - 1, b);
            }

            memo.put(key, ans);
            return ans;
        }
    }

    public static String solve() {
        double ans = new Solver(13, 4).expectedDraws();
        return String.format(java.util.Locale.US, "%.8f", ans);
    }

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