import std.algorithm;
import std.array;
import std.conv;
import std.math;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

T read(T)() { return readln.chomp.to!T; }
T[] reads(T)() { return readln.split.to!(T[]); }
alias readint = read!int;
alias readints = reads!int;

int calc(int n) {
    // n! を素因数分解
    int[int] factors;
    for (int i = 2; i <= n; i++) {
        int x = i;
        for (int j = 2; j * j <= x; j++) {
            while (x % j == 0) {
                factors[j]++;
                x /= j;
            }
        }
        if (x > 1) factors[x]++;
    }
    // if (factors.empty) return 0;
    // v2.070.1 だと empty でコンパイルエラーになるので、代わりに n = 1 でチェック
    if (n == 1) return 0;

    int[] t; // p_i^k の k の部分
    foreach (k, v; factors) t ~= v;

    // do[i][約数の個数]
    auto dp = new int[][](t.length, 76);
    for (int i = 0; i <= t[0]; i++)
        dp[0][i + 1] = 1;

    for (int i = 1; i < t.length; i++) {
        for (int j = 1; j <= 75; j++) { // i-1 までの約数の個数
            for (int k = 0; k <= t[i]; k++) {
                int x = j * (k + 1);
                if (x <= 75) {
                    dp[i][x] += dp[i - 1][j];
                }
            }
        }
    }

    return dp[t.length - 1][75];
}

void main() {
    int n = readint;
    writeln(calc(n));
}
