import java.util.Locale;

public class Euler239 {
    static double combination(int n, int k) {
        if (k < 0 || k > n)
            return 0.0;
        k = Math.min(k, n - k);
        double value = 1.0;
        for (int i = 1; i <= k; ++i) {
            value *= (n - k + i);
            value /= i;
        }
        return value;
    }

    static double probabilityExactMarkedFixed(int n, int marked, int fixedMarked) {
        if (n < 0 || marked < 0 || marked > n)
            return 0.0;
        if (fixedMarked < 0 || fixedMarked > marked)
            return 0.0;

        int badMarked = marked - fixedMarked;

        double term = 1.0;
        for (int i = 0; i < fixedMarked; ++i) {
            term /= (n - i);
        }

        double alternatingSum = term;
        for (int j = 0; j < badMarked; ++j) {
            double numer = -(badMarked - j);
            double denom = (j + 1.0) * (n - fixedMarked - j);
            term *= numer / denom;
            alternatingSum += term;
        }

        return combination(marked, fixedMarked) * alternatingSum;
    }

    public static String solve() {
        int n = 100;
        int marked = 25;
        int misplacedMarked = 22;

        int fixedMarked = marked - misplacedMarked;
        double answer = probabilityExactMarkedFixed(n, marked, fixedMarked);

        return String.format(Locale.US, "%.12f", answer);
    }

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