unittest
{
	assert( [ "9" ].solve == 0 );
	assert( [ "10" ].solve == 1 );
	assert( [ "100" ].solve == 543 );
}



import std.conv;
import std.range;
import std.stdio;

void main()
{
	stdin.byLineCopy.solve.writeln;
}

auto solve( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto n = input.front.to!( long );
	
	long[ long ] fs;
	auto ps = ( cast( long ) n ^^ 0.5L ).primes;
	foreach_reverse( i; 2L .. n + 1 )
	{
		foreach( f; i.primefactorize( ps ) )
		{
			fs[ f ]++;
		}
	}
	return solve2( fs.values, 1 );
}

long solve2( long[] fs, long m )
{
	if( fs.empty || 75 <= m ) return ( m == 75 );
	
	auto c = 0L;
	foreach( i; 1L .. fs.front + 2 )
	{
		c += solve2( fs[ 1 .. $ ], m * i );
	}
	return c;
}

// 素数列
auto primes( long x )
{
	Appender!( long[] ) ps;
	if( x < 2 ) return ps.data;
	
	auto cs = new bool[]( x + 1 );
	ps ~= 2L;
	for( auto i = 3L; i * i < cs.length; i += 2 )
	{
		if( cs[ i ] ) continue;
		for( auto j = i; i * j < cs.length; j++ )
		{
			cs[ i * j ] = true;
		}
	}
	for( auto i = 3L; i < cs.length; i += 2 )
	{
		if( !cs[ i ] ) ps ~= i;
	}
	return ps.data;
}

// 素因数分解
auto primefactorize( long x, long[] ps )
{
	Appender!( long[] ) fs;
	if( x < 2 ) return fs.data;
	
	auto s = cast( long ) x ^^ 0.5L;
	foreach( p; ps )
	{
		if( s < p ) break;
		while( x % p == 0 )
		{
			x /= p;
			fs ~= p;
		}
		if( x < 2 ) break;
	}
	if( 2 <= x ) fs ~= x;
	return fs.data;
}
