#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;

typedef long long ll;

ll gcd (ll a, ll b) {
	ll c = a % b;
	if (c==0)
		return b;
	return gcd (b, c);
}

int main () {
	ll L;
	cin >> L;
	ll ans = 1;
	ll n[11];
	ll d[11];
	for (int i=0; i<11; i++) {
		n[i] = L-i-1;
		d[i] = i+1;
	}
	for (int i=0; i<11; i++) {
		for (int j=0; j<11; j++) {
			if (d[j] != 1) {
				ll g = gcd (n[i], d[j]);
				n[i] /= g;
				d[j] /= g;
			}
		}
		ans *= n[i];
	}

	cout << ans << endl;

	return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define ff              first
#define ss              second
#define int             long long
#define pb              push_back
#define mp              make_pair
#define mt              make_tuple
#define pii             pair<int,int>
#define vi              vector<int>
#define mii             map<int,int>
#define pqb             priority_queue<int>
#define pqs             priority_queue<int,vi,greater<int> >
#define setbits(x)      __builtin_popcountll(x)
#define mod             1000000007
#define hell 100000000000000007 //10e18+7
#define mod 1000000007//10e9+7
#define pi  3.141592653589793238
#define ps(x,y)         fixed<<setprecision(y)<<x
#define mk(arr,n,type)  type *arr=new type[n];
#define range(a,b)    substr(a,b-a+1)
#define w(x)            int x; cin>>x; while(x--)
#define trace(x)    cerr<<#x<<": "<<x<<" "<<endl;
#define FIO             ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
mt19937                 rng(chrono::steady_clock::now().time_since_epoch().count());

int dp[201][13];

// int mod_exp(int x, int y, int mm)
// {
//   x %= mm;
//   if (y == 0)
//     return (1);
//   else if (y % 2 == 0)
//     return (mod_exp((x * x) % mm, y / 2, mm));
//   else
//     return ((x * mod_exp((x * x) % mm, (y - 1) / 2, mm)) % mm);
// }
// int modInverse(int n, int p)
// {
//   return mod_exp(n, p - 2, p);
// }
//remember the approach of suming up the element
// and when it exceeds from our radar
// try removing from the staring part
//priority queue max heap imp!!
// void buildSegtree(ll s1, ll e1, ll p1)
// {
//   if (s1 == e1)
//   {
//     segtree[p1] = (arr[s1]);
//     return;
//   }
//   ll mid = ((s1 + e1) / 2);
//   buildSegtree(s1, mid, 2 * p1 + 1);
//   buildSegtree(mid + 1, e1, 2 * p1 + 2);
//   segtree[p1] = ((segtree[2 * p1 + 1])+segtree[2 * p1 + 2]) ;
// }

// ll rangeQuery(ll q1, ll q2, ll s1, ll e1, ll p1)
// {
//   if (q1 <= s1 && q2 >= e1)
//     return (segtree[p1]);
//   if (q2 < s1 || q1 > e1)
//     return (0);//it varies BE CAREFULL!!
//   ll mid = (s1 + e1) / 2;
//   ll l1 = rangeQuery(q1, q2, s1, mid, 2 * p1 + 1);
//   ll l2 = rangeQuery(q1, q2, mid + 1, e1, 2 * p1 + 2);
//   return ((l1+l2));
// }
// void updateQuery(ll q1, ll q2, ll id, ll p1, ll val)
// {
//   if (q1 == q2)
//   {
//     segtree[p1] = val;
//     return;
//   }
//   ll mid = (q1 + q2) / 2;
//   if (id > mid)
//     updateQuery(mid + 1, q2, id, 2 * p1 + 2, val);
//   else
//     updateQuery(q1, mid, id, 2 * p1 + 1, val);
//   segtree[p1] = (segtree[2 * p1 + 1]+segtree[2 * p1 + 2]);
// }
// ll binpow(ll a, ll b, ll m)
// {
//   a %= m;
//   ll res = 1;
//   while (b > 0) {
//     if (b & 1)
//       res = res * a % m;
//     a = a * a % m;
//     b >>= 1;
//   }
//   return res;
// }
// ll inv(ll a) {
//   a %= mod;
//   if (a < 0) a += mod;
//   ll b = mod, u = 0, v = 1;
//   while (a) {
//     ll t = b / a;
//     b -= t * a; swap(a, b);
//     u -= t * v; swap(u, v);
//   }
//   if (u < 0) u += mod;
//   return u;
// }

int32_t main()
{
#ifndef ONLINE_JUDGE
  freopen("i1.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif
  int n;
  cin >> n;
  for (int i = 0; i < 201; i++)
  {
    for (int j = 0; j <= (min(i, 12LL)); j++)
    {
      if (i == j || j == 0)
        dp[i][j] = 1;
      else
        dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j ];
    }
  }
  cout << dp[n - 1][11];
}

