#include <bits/stdc++.h>
using namespace std;

#define df(b, e) ((b) > (e))
#define fore(i, b, e) for(auto i = (b) - df(b, e); i != e - df(b, e); i += 1 - 2 * df(b, e))
#define sz(x) (int) x.size()
#define all(x) x.begin(), x.end()
#define f first
#define s second
#define pb push_back

typedef long long lli;
typedef long double ld;
typedef pair<int, int> ii;

template <class T>
struct rge { T b, e; };

template <class T>
rge<T> range(T i, T j) {
  return rge<T>{i, j};
}

template <class T> auto dud(T *x) -> decltype(cerr << *x, 0);
template <class T> char dud(...);

struct debug {
#ifdef LOCAL
  ~debug() { cout << endl; }

  template <class T>
  typename enable_if<sizeof dud<T>(0) != 1, debug &>::type operator << (T i) {
    cout << boolalpha << i;
    return *this;
  }

  template <class T>
  typename enable_if<sizeof dud<T>(0) == 1, debug &>::type operator << (T i) {
    return *this << range(begin(i), end(i));
  }

  template <class A, class B>
  debug & operator << (pair<A, B> d) {
    return *this << "(" << d.first << ", " << d.second << ")";
  }

  template <class T>
  debug & operator << (rge<T> d) {
    *this << "[";
    for (auto it = d.b; it != d.e; ++it)
      *this << ", " + 2 * (it == d.b) << *it;
    return *this << "]";
  }
#else
  template <class T> 
  debug & operator << (const T&) {
    return *this; 
  }
#endif
};

#define deb(...) " " << #__VA_ARGS__ ": " << (__VA_ARGS__) << " "

const int N = 101;
const int D = 80;

bitset<N> isp;
vector<int> primes;
map<lli, int> mem[N][D];
int n;

vector< pair<lli, int> > factorialFactors(int n) {
  vector< pair<lli, int> > fac;
  for (lli p: primes) {
    if (n < p)
      break;
    lli mul = 1LL, k = 0;
    while (mul <= n / p) {
      mul *= p;
      k += n / mul;
    }
    fac.pb({p, k});
  }
  return fac;
}

int inline dp(int i, int divs, lli num, vector< pair<lli, int> > &fac) {
  if (i == sz(fac))
    return 0;
  if (divs == 75)
    return 1;
  if (mem[i][divs].count(num))
    return mem[i][divs][num];
  int ans = 0;
  lli mul = 1LL;
  fore (k, 0, fac[i].s + 1) {
    if (divs * (k + 1) > 75)
      break;
    ans += dp(i + 1, divs * (k + 1), num * mul, fac);
    mul *= fac[i].f;
  }
  return mem[i][divs][num] = ans;
}

int mem2[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 8, 8, 11, 11, 11, 11, 14, 14, 32, 32, 35, 35, 35, 35, 42, 42, 42, 42, 49, 49, 49, 49, 49, 49, 75, 75, 86, 86, 86, 86, 86, 86, 123, 123, 131, 131, 131, 131, 148, 148, 153, 153, 170, 170, 170, 170, 170, 170, 227, 227, 227, 227, 227, 227, 250, 250, 323, 323, 324, 324, 324, 324, 354, 354, 354, 354, 384, 384, 384, 384, 384, 391, 491, 491, 529, 529, 529, 529, 529, 529, 543};

void sieve() {
  isp.set();
  isp[0] = isp[1] = 0;
  fore (i, 2, N) if (isp[i]) {
    primes.pb(i);
    if (1LL * i * i < N)
      for (int j = i * i; j < N; j += i)
        isp[j] = 0;
  }
}

int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  //sieve();
  // cout << "{";
  // fore (i, 1, 101) {
  //   auto fac = factorialFactors(i);
  //   fore (j, 0, N)
  //     fore (d, 0, D)
  //       mem[j][d].clear();
  //   cout << dp(0, 1LL, 1LL, fac) << ", ";
  // }
  // cout << "}\n";
  cin >> n;
  cout << mem2[n] << '\n';
  return 0;
}


Measured memory_bytes: 640