#include <bits/stdc++.h>
using namespace std;
inline bool inrange(int i, int j, int n, int m) {
  return (i >= 0 && j >= 0 && i < n && j < m);
}
long long gcd(long long a, long long b) {
  return (!(a % b)) ? b : gcd(b, a % b);
}
long long lcm(long long a, long long b) { return (a * b) / gcd(a, b); }
long long bigmod(long long x, long long y) {
  if (y == 0) return 1;
  if (y == 1) return x;
  long long tmp = bigmod(x, y / 2);
  if (!(y & 1)) return (tmp * tmp) % 1000000007;
  return ((tmp * tmp) % 1000000007 * x) % 1000000007;
}
long long power(unsigned long long x, unsigned long long y) {
  if (y == 0) return 1;
  if (y == 1) return x;
  long long tmp = power(x, y / 2);
  if (!(y & 1)) return (tmp * tmp);
  return ((tmp * tmp) * x);
}
bool isprime(long long x) {
  if (x == 1) return 0;
  for (int i = 2, a = sqrt(x); i <= a; i++)
    if (!(x % i)) return 0;
  return 1;
}
long long largfact(long long x) {
  if (isprime(x)) return x;
  for (int i = sqrt(x); i >= 2; i--)
    if (!(x % i) && isprime(i)) return i;
  return 1;
}
bool palindrome(long long x) {
  long long y = 0, tmp = x;
  while (tmp) y = y * 10 + tmp % 10, tmp /= 10;
  return (x == y);
}
long long reverse_num(long long x) {
  long long y = 0;
  while (x) y = y * 10 + x % 10, x /= 10;
  return y;
}
inline bool sol(double p, double q, double r, double s, double t, double u,
                double x) {
  long double res = p * powl(2.718281828, -x) + q * sin(x) + r * cos(x) +
                    s * tan(x) + t * (x) * (x) + u;
  return (res <= 1e-9);
}
inline long long pow(int x, int y) {
  if (y == 0) return 1;
  if (y % 2 == 0) {
    long long temp = pow(x, y / 2);
    return (temp * temp);
  }
  return x * pow(x, y - 1);
}
inline long long bigmod(long long a, long long p, long long m) {
  if (p == 0) return 1;
  if (p % 2) {
    return ((a % m) * (bigmod(a, p - 1, m))) % m;
  } else {
    long long c = bigmod(a, p / 2, m);
    return ((c % m) * (c % m)) % m;
  }
}
inline long long modInverseEuler(long long a, long long m) {
  return bigmod(a, m - 2, m);
}
inline pair<long long, pair<long long, long long> > extendedEuclid(
    long long a, long long b) {
  if (a == 0) return make_pair(b, make_pair(0, 1));
  pair<long long, pair<long long, long long> > p;
  p = extendedEuclid(b % a, a);
  return make_pair(
      p.first,
      make_pair(p.second.second - p.second.first * (b / a), p.second.first));
}
inline long long modInverse(long long a, long long m) {
  return (extendedEuclid(a, m).second.first + m) % m;
}
const int sieve_limit = 8388608;
vector<int> primes;
bitset<sieve_limit> bs;
void sieve() {
  for (int i = 2; i < sieve_limit; i++) {
    if (!bs[i]) {
      for (int j = 2 * i; j < sieve_limit; j += i) bs[j] = 1;
      primes.push_back(i);
    }
  }
}
unsigned long long inv(unsigned long long a, unsigned long long mod) {
  return (a > 1) ? (mod - inv(mod % a, a) * mod / a) : 1;
}
string its(long long a, long long base) {
  string s;
  while (a) {
    s.insert(s.begin(), (a % base) + '0');
    a /= base;
  }
  return s;
}
long long sti(string s, long long base) {
  long long a = 0, len = s.length();
  for (long long i = 0; i < len; i++) a *= base, a += s[i] - '0';
  return a;
}
long long bsti(string s) {
  long long a = 0, len = s.length();
  for (long long i = len - 1; i >= 0; i--)
    a += (s[i] - '0') * (1LL << len - 1 - i);
  return a;
}
string itbs(long long a) {
  string s;
  for (long long i = 0; i < 64; i++)
    if (1LL << i & a)
      s.insert(s.begin(), '1');
    else
      s.insert(s.begin(), '0');
  return s;
}
unsigned long long C(unsigned long long x, unsigned long long y) {
  if (y > x / 2) return C(x, x - y);
  long long temp = ++y, res = 1;
  while (--temp) res *= x--;
  while (--y) res /= y;
  return res;
}
vector<string> istrstr() {
  string s;
  vector<string> st;
  getline(cin, s);
  istringstream iss(s);
  while (iss >> s) st.push_back(s);
  return st;
}
vector<long long> prefixFunction(string pat) {
  long long m = pat.length();
  vector<long long> longestPrefix(m);
  for (long long i = 1, k = 0; i < m; i++) {
    while (k > 0 && pat[k] != pat[i]) k = longestPrefix[k - 1];
    if (pat[k] == pat[i])
      longestPrefix[i] = ++k;
    else
      longestPrefix[i] = k;
  }
  return longestPrefix;
}
bool is_pal(string s1) {
  string s2 = s1;
  reverse(s1.begin(), s1.end());
  s2 += "@" + s1;
  vector<long long> f = prefixFunction(s2);
  return f[s2.length() - 1] == s1.length();
}
unsigned long long CE(unsigned long long n, unsigned long long i) {
  unsigned long long ans = 1;
  for (int j = 0; j < i; j++) {
    ans *= n - j;
    ans /= j + 1;
  }
  return ans;
}
int main() {
  unsigned long long n;
  cin >> n;
  unsigned long long ans = 1;
  for (int i = n; i > n - 5; i--) {
    ans *= i;
  }
  cout << CE(n, 5) * ans;
  return 0;
}

### Prompt

Create a solution in CPP for the following problem:

The city park of IT City contains n east to west paths and n north to south paths. Each east to west path crosses each north to south path, so there are n2 intersections.

The city funded purchase of five benches. To make it seems that there are many benches it was decided to place them on as many paths as possible. Obviously this requirement is satisfied by the following scheme: each bench is placed on a cross of paths and each path contains not more than one bench.

Help the park administration count the number of ways to place the benches.

Input

The only line of the input contains one integer n (5 ≤ n ≤ 100) — the number of east to west paths and north to south paths.

Output

Output one integer — the number of ways to place the benches.

Examples

Input

5


Output

120

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
inline bool inrange(int i, int j, int n, int m) {
  return (i >= 0 && j >= 0 && i < n && j < m);
}
long long gcd(long long a, long long b) {
  return (!(a % b)) ? b : gcd(b, a % b);
}
long long lcm(long long a, long long b) { return (a * b) / gcd(a, b); }
long long bigmod(long long x, long long y) {
  if (y == 0) return 1;
  if (y == 1) return x;
  long long tmp = bigmod(x, y / 2);
  if (!(y & 1)) return (tmp * tmp) % 1000000007;
  return ((tmp * tmp) % 1000000007 * x) % 1000000007;
}
long long power(unsigned long long x, unsigned long long y) {
  if (y == 0) return 1;
  if (y == 1) return x;
  long long tmp = power(x, y / 2);
  if (!(y & 1)) return (tmp * tmp);
  return ((tmp * tmp) * x);
}
bool isprime(long long x) {
  if (x == 1) return 0;
  for (int i = 2, a = sqrt(x); i <= a; i++)
    if (!(x % i)) return 0;
  return 1;
}
long long largfact(long long x) {
  if (isprime(x)) return x;
  for (int i = sqrt(x); i >= 2; i--)
    if (!(x % i) && isprime(i)) return i;
  return 1;
}
bool palindrome(long long x) {
  long long y = 0, tmp = x;
  while (tmp) y = y * 10 + tmp % 10, tmp /= 10;
  return (x == y);
}
long long reverse_num(long long x) {
  long long y = 0;
  while (x) y = y * 10 + x % 10, x /= 10;
  return y;
}
inline bool sol(double p, double q, double r, double s, double t, double u,
                double x) {
  long double res = p * powl(2.718281828, -x) + q * sin(x) + r * cos(x) +
                    s * tan(x) + t * (x) * (x) + u;
  return (res <= 1e-9);
}
inline long long pow(int x, int y) {
  if (y == 0) return 1;
  if (y % 2 == 0) {
    long long temp = pow(x, y / 2);
    return (temp * temp);
  }
  return x * pow(x, y - 1);
}
inline long long bigmod(long long a, long long p, long long m) {
  if (p == 0) return 1;
  if (p % 2) {
    return ((a % m) * (bigmod(a, p - 1, m))) % m;
  } else {
    long long c = bigmod(a, p / 2, m);
    return ((c % m) * (c % m)) % m;
  }
}
inline long long modInverseEuler(long long a, long long m) {
  return bigmod(a, m - 2, m);
}
inline pair<long long, pair<long long, long long> > extendedEuclid(
    long long a, long long b) {
  if (a == 0) return make_pair(b, make_pair(0, 1));
  pair<long long, pair<long long, long long> > p;
  p = extendedEuclid(b % a, a);
  return make_pair(
      p.first,
      make_pair(p.second.second - p.second.first * (b / a), p.second.first));
}
inline long long modInverse(long long a, long long m) {
  return (extendedEuclid(a, m).second.first + m) % m;
}
const int sieve_limit = 8388608;
vector<int> primes;
bitset<sieve_limit> bs;
void sieve() {
  for (int i = 2; i < sieve_limit; i++) {
    if (!bs[i]) {
      for (int j = 2 * i; j < sieve_limit; j += i) bs[j] = 1;
      primes.push_back(i);
    }
  }
}
unsigned long long inv(unsigned long long a, unsigned long long mod) {
  return (a > 1) ? (mod - inv(mod % a, a) * mod / a) : 1;
}
string its(long long a, long long base) {
  string s;
  while (a) {
    s.insert(s.begin(), (a % base) + '0');
    a /= base;
  }
  return s;
}
long long sti(string s, long long base) {
  long long a = 0, len = s.length();
  for (long long i = 0; i < len; i++) a *= base, a += s[i] - '0';
  return a;
}
long long bsti(string s) {
  long long a = 0, len = s.length();
  for (long long i = len - 1; i >= 0; i--)
    a += (s[i] - '0') * (1LL << len - 1 - i);
  return a;
}
string itbs(long long a) {
  string s;
  for (long long i = 0; i < 64; i++)
    if (1LL << i & a)
      s.insert(s.begin(), '1');
    else
      s.insert(s.begin(), '0');
  return s;
}
unsigned long long C(unsigned long long x, unsigned long long y) {
  if (y > x / 2) return C(x, x - y);
  long long temp = ++y, res = 1;
  while (--temp) res *= x--;
  while (--y) res /= y;
  return res;
}
vector<string> istrstr() {
  string s;
  vector<string> st;
  getline(cin, s);
  istringstream iss(s);
  while (iss >> s) st.push_back(s);
  return st;
}
vector<long long> prefixFunction(string pat) {
  long long m = pat.length();
  vector<long long> longestPrefix(m);
  for (long long i = 1, k = 0; i < m; i++) {
    while (k > 0 && pat[k] != pat[i]) k = longestPrefix[k - 1];
    if (pat[k] == pat[i])
      longestPrefix[i] = ++k;
    else
      longestPrefix[i] = k;
  }
  return longestPrefix;
}
bool is_pal(string s1) {
  string s2 = s1;
  reverse(s1.begin(), s1.end());
  s2 += "@" + s1;
  vector<long long> f = prefixFunction(s2);
  return f[s2.length() - 1] == s1.length();
}
unsigned long long CE(unsigned long long n, unsigned long long i) {
  unsigned long long ans = 1;
  for (int j = 0; j < i; j++) {
    ans *= n - j;
    ans /= j + 1;
  }
  return ans;
}
int main() {
  unsigned long long n;
  cin >> n;
  unsigned long long ans = 1;
  for (int i = n; i > n - 5; i--) {
    ans *= i;
  }
  cout << CE(n, 5) * ans;
  return 0;
}

```