#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(n);++i)
#define ALL(A) A.begin(), A.end()

using namespace std;

typedef long long ll;
typedef pair<int, int> P;

vector<int> divisor(int n){
	vector<int> res; res.clear();
	for (int i = 1; i * i <= n; ++i){
		if (n % i == 0){
			res.push_back(i);
			if (i * i < n){
				res.push_back(n / i);
			} // end if
		} // end if
	} // end for

	sort(ALL(res));
	
	return res;
}

const int MAX_N = 101;

bool p[MAX_N];

vector<int> prime;

void makePrime(void){
	fill (p, p + MAX_N, true); 
	prime.clear();

	p[0] = false;
	p[1] = false;

	for (int i = 2; i < MAX_N; ++i){
		if (p[i]){
			for (int j = 2 * i; j < MAX_N; j += i){
				p[j] = false;
			} // end for
		} // end if
	} // end for

	for (int i = 2; i < MAX_N; ++i){
		if (p[i]){
			prime.push_back(i);
		} // end if
	} // end for

//	cerr << "prime_sz:" << (int)prime.size() << endl;
}

int factor[101][25];	// i!: i 番目で 2,3,5,...,97 の順での素因数の数 

vector<int> primeFactorization(int n){
	vector<int> res(25, 0);
	rep (j, 25){
		while(n > 0 && n % prime[j] == 0){
			++res[j];
			n /= prime[j];
		} // end while
		if (n == 0) break;
	} // end rep

	return res;
}

int main()
{
	makePrime();
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	memset(factor, 0, sizeof(factor));
	for (int i = 2; i <= 100; ++i){
		rep (j, 25){
			factor[i][j] = factor[i-1][j];
		} // end rep
		vector<int> addfactor = primeFactorization(i);
		rep(j, 25){
			factor[i][j] += addfactor[j];
		} // end rep
	} // end for 

	int N; cin >> N;

	int res = 0;
	if (N >= 10){
/*
//	デバックの一貫
//	素因数の数が一致しているか確かめた
		cerr << "N! primeFactorization:" << endl;
		rep (j, 25){
			cerr << setw(3) << prime[j] << (j != 25 - 1 ? ' ' : '\n');
		} // end rep
		rep (j, 25){
			cerr << setw(3) << factor[N][j] << (j != 25 - 1 ? ' ' : '\n');
		} // end rep
*/
		// case 1: 75 - 1 個以上の素因数をもつものを1つ選ぶ
		int curr = 0;
		rep (j, 25){
			if (factor[N][j] >= 75 - 1){
				++curr;
			} // end if
		} // end rep
		res += curr;
//		cerr << "res: " << res << endl;

		// case 2: 25 - 1個 以上の素因数をもつもの1つと3 - 1 個以上の素因数をもつもの1つ選ぶ
		int curr1 = 0;
		int curr2 = 0;
		rep (j, 25){
			if (factor[N][j] >= 25 - 1){
				++curr1;
			} // end if
			if (factor[N][j] >= 3 - 1){
				++curr2;
			} // end if
		} // end rep
		res += curr1 * (curr2 - 1);
//		cerr << "res: " << res << endl;

		// case 3: 15 - 1 個以上の素因数をもつもの1つと 5 - 1 個以上の素因数をもつもの1つ選ぶ
		curr1 = 0;
		curr2 = 0;
		rep(j, 25){
			if (factor[N][j] >= 15 - 1){
				++curr1;
			} // end if
			if (factor[N][j] >= 5 - 1){
				++curr2;
			} // end if
		} // end rep
		res += curr1 * (curr2 - 1);
//		cerr << "res: " << res << endl;

		// case 4: 5 - 1 個以上の素因数をもつもの2つと 3 - 1 個以上の素因数をもつもの1つ選ぶ
		curr1 = 0;
		curr2 = 0;
		rep (j, 25){
			if (factor[N][j] >= 5 - 1){
				++curr1;
			} // end if
			if (factor[N][j] >= 3 - 1){
				++curr2;
			} // end if
		} // end rep
		res += curr1 * (curr1 - 1) / 2 * max(0, curr2 - 2);
//		cerr << "res: " << res << endl;		
	} // end if 

	cout << res << endl;
/*
	考察の一貫

	最初に約数を考えた

	vector<int> ans = divisor(N);

	int n = (int)ans.size();
	cerr << "sz: " << n << endl;
	rep (i, n){
		cerr << ans[i] << (i != n - 1 ? ' ' : '\n');
	} // end rep
*/	
	return 0;
}

Measured memory_bytes: 256