#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct Ubi {
vector<int> a;
Ubi (const string &s) {
for(int i = (int)s.size() - 1; i >= 0; --i) {
a.push_back(s[i] - '0');
}
}
void print(Ubi a1) {
for(int i = a1.a.size() - 1; i >= 0; --i) {
cout << a1.a[i];
}
}
};
void dlz(Ubi & a) {
while(a.a.size() > 1 && a.a.back() == 0) {
a.a.pop_back();
}
}
Ubi operator + (const Ubi &a1, const Ubi &a2) {
Ubi sum("");
int n;
if (a1.a.size() > a2.a.size()) {
n = a1.a.size() + 1;
} else {
n = a2.a.size() + 1;
}
sum.a.assign(n, 0);
for(int i = 0; i < n; ++i) {
if (a1.a.size() > i) {
sum.a[i] += a1.a[i];
}
if (a2.a.size() > i) {
sum.a[i] += a2.a[i];
}
if (sum.a[i] >= 10) {
sum.a[i + 1] ++;
sum.a[i] -= 10;
}
}
dlz(sum);
return sum;
}
Ubi operator - (const Ubi &a1, const Ubi &a2) {
Ubi sum("");
int n = (int)max(a1.a.size(), a2.a.size()) + 1;
sum.a.assign(n, 0);
for(int i = 0; i < n; ++i) {
if (a2.a.size() > i) {
sum.a[i] += (a1.a[i] - a2.a[i]);
} else if (a1.a.size() > i) {
sum.a[i] += a1.a[i];
}
if (sum.a[i] < 0 ) {
sum.a[i + 1] --;
sum.a[i] += 10;
}
}
dlz(sum);
return sum;
}
bool operator < (const Ubi &a1, const Ubi &a2) {
if (a1.a.size() == a2.a.size()) {
for(int i = a1.a.size() - 1; i >= 0; --i) {
if (a1.a[i] < a2.a[i]) {
return true;
}
if (a2.a[i] < a1.a[i]) {
return false;
}
}
return false;
} else {
if (a1.a.size() < a2.a.size()) {
return true;
} else {
return false;
}
}
}
bool operator > (const Ubi &a1, const Ubi &a2)
{
return a2 < a1;
}
bool operator == (const Ubi &a1, const Ubi &a2)
{
return !(a1 < a2 || a1 > a2);
}
bool operator <= (const Ubi &a1, const Ubi &a2)
{
return (a1 < a2 || a1 == a2);
}
Ubi operator * (const Ubi &a1, const Ubi &a2) {
Ubi pr("");
pr.a.assign(a1.a.size() + a2.a.size(), 0);
for (int i = 0; i < a1.a.size(); ++i) {
for (int j = 0; j < a2.a.size(); ++j) {
pr.a[i + j] += a1.a[i] * a2.a[j];
}
}
for(int i = 0; i < pr.a.size() - 1; ++i) {
if(pr.a[i] >= 10) {
pr.a[i + 1] += pr.a[i] / 10;
pr.a[i] %= 10;
}
}
dlz(pr);
return pr;
}
Ubi operator / (const Ubi &a1, const int &a2) {
Ubi res("");
res.a.assign(a1.a.size(), 0);
long long r = 0;
for(int i = a1.a.size() - 1; i >= 0; i--) {
r = 10 * r + a1.a[i];
res.a[i] = r / a2;
r %= a2;
}
dlz(res);
return res;
}
long long operator % (const Ubi &a1, const long long &a2) {
Ubi res("");
res.a.assign(a1.a.size(), 0);
long long r = 0;
for(int i = a1.a.size() - 1; i >= 0; i--) {
r = 10 * r + a1.a[i];
res.a[i] = r / a2;
r %= a2;
}
return r;
}
int main() {
int n;
cin >> n;
Ubi ans("1");
for(int i = 1; i <= n; ++i) {
Ubi t = ans;
for(int j = 1; j < i; ++j) {
ans = ans + t;
}
}
for(int i = ans.a.size() - 1; i >= 0; --i) {
cout << ans.a[i];
}
return 0;
}