#include <iostream>
#define N 100000
#define M 10
using namespace std;
typedef struct
{
int number[M];
int result[N];
int ln;
int lr;
} SqList;
void out(SqList *ls)
{
int j;
for(j = ls->lr; j >= 1; --j)
cout << ls->result[j];
cout << endl;
}
void c1(SqList *ls, SqList *&s, int n)
{
s = (SqList *) malloc (sizeof(SqList));
int i;
int a, b;
for(i = 1; i <= ls->lr; ++i)
{
a = ls->result[i] * n % 10;
b = ls->result[i] * n / 10;
if(i == 1)
{
s->result[1] = a;
s->result[2] = b;
s->lr = b > 0 ? 2 : 1;
}
else
{
if(s->lr < i)
{
s->result[i] = a;
s->result[i + 1] = b;
s->lr = b > 0 ? i + 1 : i;
}
else
{
b = b + (a + s->result[i]) / 10;
a = (a + s->result[i]) % 10;
s->result[i] = a;
s->result[i + 1] = b;
s->lr = b > 0 ? i + 1 : i;
}
}
}
}
void turn(SqList *&ls, int n)
{
ls = (SqList *) malloc (sizeof(SqList));
int i;
for(i = 1; n != 0; ++i)
{
ls->number[i] = n % 10;
n /= 10;
}
ls->ln = i - 1;
}
void give(SqList *&ls, SqList *s, int n)
{
int i;
int a, b;
a = 0;
for(i = 1; i <= s->lr; ++i)
{
if(ls->lr < n + i) {ls->result[n + i] = s->result[i] + a;a = 0;}
else
{
b = (ls->result[n + i] + s->result[i] + a) / 10;
ls->result[n + i] = (ls->result[n + i] + s->result[i] + a) % 10;
a = b;
}
}
if(a > 0)
{
ls->result[n + i] = a;
ls->lr = n + i;
}
else
ls->lr = n + i - 1;
}
void c2(int n)
{
SqList *ls, *num, *mid1, *mid;
int i, j;
ls = (SqList *) malloc (sizeof(SqList));
ls->result[1] = 1;
ls->lr = 1;
for(i = 1; i <= n; ++i)
{
turn(num, i);
mid = (SqList *) malloc (sizeof(SqList));
mid->lr = 0;
for(j = 1; j <= num->ln; ++j)
{
c1(ls, mid1, num->number[j]);
give(mid, mid1, j - 1);
}
ls = mid;
}
out(ls);
}
int main()
{
int n;
while(1)
{
cin >> n;
c2(n);
}
return 0;
}
#define N 100000
#define M 10
using namespace std;
typedef struct
{
int number[M];
int result[N];
int ln;
int lr;
} SqList;
void out(SqList *ls)
{
int j;
for(j = ls->lr; j >= 1; --j)
cout << ls->result[j];
cout << endl;
}
void c1(SqList *ls, SqList *&s, int n)
{
s = (SqList *) malloc (sizeof(SqList));
int i;
int a, b;
for(i = 1; i <= ls->lr; ++i)
{
a = ls->result[i] * n % 10;
b = ls->result[i] * n / 10;
if(i == 1)
{
s->result[1] = a;
s->result[2] = b;
s->lr = b > 0 ? 2 : 1;
}
else
{
if(s->lr < i)
{
s->result[i] = a;
s->result[i + 1] = b;
s->lr = b > 0 ? i + 1 : i;
}
else
{
b = b + (a + s->result[i]) / 10;
a = (a + s->result[i]) % 10;
s->result[i] = a;
s->result[i + 1] = b;
s->lr = b > 0 ? i + 1 : i;
}
}
}
}
void turn(SqList *&ls, int n)
{
ls = (SqList *) malloc (sizeof(SqList));
int i;
for(i = 1; n != 0; ++i)
{
ls->number[i] = n % 10;
n /= 10;
}
ls->ln = i - 1;
}
void give(SqList *&ls, SqList *s, int n)
{
int i;
int a, b;
a = 0;
for(i = 1; i <= s->lr; ++i)
{
if(ls->lr < n + i) {ls->result[n + i] = s->result[i] + a;a = 0;}
else
{
b = (ls->result[n + i] + s->result[i] + a) / 10;
ls->result[n + i] = (ls->result[n + i] + s->result[i] + a) % 10;
a = b;
}
}
if(a > 0)
{
ls->result[n + i] = a;
ls->lr = n + i;
}
else
ls->lr = n + i - 1;
}
void c2(int n)
{
SqList *ls, *num, *mid1, *mid;
int i, j;
ls = (SqList *) malloc (sizeof(SqList));
ls->result[1] = 1;
ls->lr = 1;
for(i = 1; i <= n; ++i)
{
turn(num, i);
mid = (SqList *) malloc (sizeof(SqList));
mid->lr = 0;
for(j = 1; j <= num->ln; ++j)
{
c1(ls, mid1, num->number[j]);
give(mid, mid1, j - 1);
}
ls = mid;
}
out(ls);
}
int main()
{
int n;
while(1)
{
cin >> n;
c2(n);
}
return 0;
}