#include <bits/stdc++.h>
using namespace std;
const int N = 35;
vector<long long> is_prime(N + 1, true);
bool sortinrev(const pair<int, int> &a, const pair<int, int> &b) {
  return (a.first > b.first);
}
bool sortbysecdesc(const pair<int, int> &a, const pair<int, int> &b) {
  return a.second > b.second;
}
bool sortbysec(const pair<int, int> &a, const pair<int, int> &b) {
  return (a.second < b.second);
}
long long powerm(long long a, long long k) {
  if (!k) {
    return 1;
  }
  long long b = powerm(a, k / 2);
  b = b * b % (1000000000 + 7);
  if (k % 2) {
    return a * b % (1000000000 + 7);
  } else {
    return b;
  }
}
long long int power(long long int a, long long int b) {
  if (b == 1) return a;
  if (b == 0) return 1;
  long long int m1 = power(a, b / 2);
  if (b % 2) return m1 * m1 * a;
  return m1 * m1;
}
void seive_of_eras(long long n) {
  is_prime[0] = 0;
  is_prime[1] = 0;
  for (long long i = 2; i * i <= n; i++) {
    if (is_prime[i]) {
      for (long long j = i * i; j <= n; j += i) {
        is_prime[j] = false;
      }
    }
  }
}
bool isprime(long long a) {
  if (a <= 1) return false;
  if (a == 2 || a == 3) return true;
  if (a % 2 == 0 || a % 3 == 0) return false;
  for (long long i = 5; i * i <= a; i = i + 6) {
    if (a % i == 0 || a % (i + 2) == 0) return false;
  }
  return true;
}
long long fact[N], invfact[N];
void initialize_nCr() {
  long long p = (1000000000 + 7);
  fact[0] = 1;
  for (long long i = 1; i < N; i++) {
    fact[i] = fact[i - 1] * i % p;
  }
  invfact[N - 1] = powerm(fact[N - 1], p - 2);
  for (long long i = N - 2; i >= 0; i--) {
    invfact[i] = invfact[i + 1] * (i + 1) % p;
  }
}
long long nCr(long long n, long long r) {
  if (r > n | n < 0 || r < 0) return 0;
  return fact[n] * invfact[r] % (1000000000 + 7) * invfact[n - r] %
         (1000000000 + 7);
}
void codeit() {
  long long n;
  cin >> n;
  long long ans =
      (n * (n - 1) * (n - 2) * (n - 3) * (n - 4)) / (5 * 4 * 3 * 2 * 1);
  ans = ans * n * (n - 1) * (n - 2) * (n - 3) * (n - 4);
  cout << ans << '\n';
  return;
}
int main() {
  long long tt;
  tt = 1;
  for (long long i = 0; i < tt; i++) codeit();
}

### Prompt

Please provide a CPP coded solution to the problem described below:

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;
const int N = 35;
vector<long long> is_prime(N + 1, true);
bool sortinrev(const pair<int, int> &a, const pair<int, int> &b) {
  return (a.first > b.first);
}
bool sortbysecdesc(const pair<int, int> &a, const pair<int, int> &b) {
  return a.second > b.second;
}
bool sortbysec(const pair<int, int> &a, const pair<int, int> &b) {
  return (a.second < b.second);
}
long long powerm(long long a, long long k) {
  if (!k) {
    return 1;
  }
  long long b = powerm(a, k / 2);
  b = b * b % (1000000000 + 7);
  if (k % 2) {
    return a * b % (1000000000 + 7);
  } else {
    return b;
  }
}
long long int power(long long int a, long long int b) {
  if (b == 1) return a;
  if (b == 0) return 1;
  long long int m1 = power(a, b / 2);
  if (b % 2) return m1 * m1 * a;
  return m1 * m1;
}
void seive_of_eras(long long n) {
  is_prime[0] = 0;
  is_prime[1] = 0;
  for (long long i = 2; i * i <= n; i++) {
    if (is_prime[i]) {
      for (long long j = i * i; j <= n; j += i) {
        is_prime[j] = false;
      }
    }
  }
}
bool isprime(long long a) {
  if (a <= 1) return false;
  if (a == 2 || a == 3) return true;
  if (a % 2 == 0 || a % 3 == 0) return false;
  for (long long i = 5; i * i <= a; i = i + 6) {
    if (a % i == 0 || a % (i + 2) == 0) return false;
  }
  return true;
}
long long fact[N], invfact[N];
void initialize_nCr() {
  long long p = (1000000000 + 7);
  fact[0] = 1;
  for (long long i = 1; i < N; i++) {
    fact[i] = fact[i - 1] * i % p;
  }
  invfact[N - 1] = powerm(fact[N - 1], p - 2);
  for (long long i = N - 2; i >= 0; i--) {
    invfact[i] = invfact[i + 1] * (i + 1) % p;
  }
}
long long nCr(long long n, long long r) {
  if (r > n | n < 0 || r < 0) return 0;
  return fact[n] * invfact[r] % (1000000000 + 7) * invfact[n - r] %
         (1000000000 + 7);
}
void codeit() {
  long long n;
  cin >> n;
  long long ans =
      (n * (n - 1) * (n - 2) * (n - 3) * (n - 4)) / (5 * 4 * 3 * 2 * 1);
  ans = ans * n * (n - 1) * (n - 2) * (n - 3) * (n - 4);
  cout << ans << '\n';
  return;
}
int main() {
  long long tt;
  tt = 1;
  for (long long i = 0; i < tt; i++) codeit();
}

```