Problem: Because of budget cuts one IT company established new non-financial reward system instead of bonuses.

Two kinds of actions are rewarded: fixing critical bugs and suggesting new interesting features. A man who fixed a critical bug gets "I fixed a critical bug" pennant on his table. A man who suggested a new interesting feature gets "I suggested a new feature" pennant on his table.

Because of the limited budget of the new reward system only 5 "I fixed a critical bug" pennants and 3 "I suggested a new feature" pennants were bought.

In order to use these pennants for a long time they were made challenge ones. When a man fixes a new critical bug one of the earlier awarded "I fixed a critical bug" pennants is passed on to his table. When a man suggests a new interesting feature one of the earlier awarded "I suggested a new feature" pennants is passed on to his table.

One man can have several pennants of one type and of course he can have pennants of both types on his table. There are n tables in the IT company. Find the number of ways to place the pennants on these tables given that each pennant is situated on one of the tables and each table is big enough to contain any number of pennants.

Input

The only line of the input contains one integer n (1 ≤ n ≤ 500) — the number of tables in the IT company.

Output

Output one integer — the amount of ways to place the pennants on n tables.

Examples

Input

2


Output

24

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18 + 1;
const int MAX = 200001;
const long long MOD = 1000000007;
struct trio {
  int first;
  int second;
  int third;
};
struct long_trio {
  long long first;
  long long second;
  long long third;
};
double dist_point_line(double x1, double y1, double x2, double y2, double x3,
                       double y3) {
  double distance = abs((y3 - y1) * x2 - (x3 - x1) * y2 + x3 * y1 - x1 * y3) /
                    (2 * sqrt((x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1)));
  return distance;
}
double dist(double x1, double y1, double x2, double y2) {
  double distance = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
  return distance;
}
double triangle_s(double x1, double y1, double x2, double y2, double x3,
                  double y3) {
  double a1 = dist(x1, y1, x2, y2);
  double a2 = dist(x1, y1, x3, y3);
  double a3 = dist(x3, y3, x2, y2);
  return sqrt((a1 + a2 + a3) / 2 * (a1 + a2 - a3) / 2 * (a1 - a2 + a3) / 2 *
              (-a1 + a2 + a3) / 2);
}
long long inq(long long k, long long q) {
  if (q == 0) return 1;
  long long l = inq(k, q / 2);
  if (q % 2 == 0)
    return l * l % MOD;
  else
    return (l * l % MOD) * k % MOD;
}
long long gcd(long long a, long long b) {
  if (a < b) swap(a, b);
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long cubr(long long a) {
  long long l = -1, r = 1e6 + 2;
  while (l < r - 1) {
    long long mid = (l + r) / 2;
    if (mid * mid * mid > a)
      r = mid;
    else
      l = mid;
  }
  return l;
}
long long max(long long a, long long b) {
  if (a > b) return a;
  return b;
}
long long min(long long a, long long b) { return -1 * max(-a, -b); }
long long possible(long long q) {
  if (abs(q) == INF) return -1;
  return q;
}
bool correct(int x, int xx) {
  if (x < 0) return 0;
  if (x >= xx) return 0;
  return 1;
}
long long dsumm(long long x) {
  long long y = 1;
  long long z = 0;
  for (int i = 0; i < 18; i++) {
    z += x / y % 10;
    y *= 10;
  }
  return z;
}
long long dsumm2(long long x) {
  long long y = 1;
  long long z = 0;
  for (int i = 0; i < 60; i++) {
    z += x / y % 2;
    y *= 2;
  }
  return z;
}
void check_(vector<int> checked) { return; }
void perms(vector<int> perm, vector<int> used, int n, int k) {
  if (k == 0) {
    check_(perm);
    return;
  }
  for (int i = 0; i < n; i++) {
    if (used[i] == 0) {
      used[i] = 1;
      perm.push_back(i);
      perms(perm, used, n, k - 1);
      perm.pop_back();
      used[i] = 0;
    }
  }
  return;
}
void bins(vector<int> bin, int k) {
  if (k == 0) {
    check_(bin);
    return;
  }
  bin.push_back(0);
  bins(bin, k - 1);
  bin.pop_back();
  bin.push_back(1);
  bins(bin, k - 1);
  bin.pop_back();
  return;
}
long long fact(long long k) {
  long long zo = 1;
  for (long long i = 1; i <= k; i++) {
    zo *= i;
  }
  return zo;
}
long long cnk(long long k, long long n) {
  long long zo = 1;
  for (int i = n; i >= n - k + 1; i--) {
    zo = zo * i;
  }
  zo /= fact(k);
  return zo;
}
string months[12] = {"January",   "February", "March",    "April",
                     "May",       "June",     "July",     "August",
                     "September", "October",  "November", "December"};
int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int cx[6] = {1, -1, 0, 0, 0, 0};
int cy[6] = {0, 0, 1, -1, 0, 0};
int cz[6] = {0, 0, 0, 0, 1, -1};
long long n;
long long cnk_[600][600];
int main() {
  cin >> n;
  cnk_[0][0] = 1;
  for (int i = 1; i <= 500; i++) {
    for (int j = 0; j <= i; j++) {
      cnk_[i][j] = cnk_[i - 1][j] + cnk_[i - 1][j - 1];
    }
  }
  long long q1 = cnk_[n][5] * (cnk_[n][3] + cnk_[n][2] * 2 + cnk_[n][1]);
  long long q2 = cnk_[n][4] * 4 * (cnk_[n][3] + cnk_[n][2] * 2 + cnk_[n][1]);
  long long q3 = cnk_[n][3] * 6 * (cnk_[n][3] + cnk_[n][2] * 2 + cnk_[n][1]);
  long long q4 = cnk_[n][2] * 4 * (cnk_[n][3] + cnk_[n][2] * 2 + cnk_[n][1]);
  long long q5 = cnk_[n][1] * (cnk_[n][3] + cnk_[n][2] * 2 + cnk_[n][1]);
  cout << q1 + q2 + q3 + q4 + q5;
}