Cod sursa(job #797035)
#include <cstdio>
const int MAX_SIZE(1000000);
const int BASE(1000000);
const int DIGITS(6);
int n;
int number [MAX_SIZE];
inline void read (void)
{
std::freopen("patrate2.in","r",stdin);
std::scanf("%d",&n);
std::fclose(stdout);
}
inline void print (void)
{
std::freopen("patrate2.out","w",stdout);
std::printf("%d",number[*number]);
int x, digits(0);
for (int *iterator(number + *number - 1) ; iterator > number ; --iterator)
{
x = *iterator;
while (x)
{
x /= 10;
++digits;
}
digits = DIGITS - digits;
while (digits)
{
std::putchar('0');
--digits;
}
if (*iterator)
std::printf("%d",*iterator);
}
std::putchar('\n');
std::fclose(stdout);
}
inline void mul (int a [ ], int b)
{
int index(1), reminder(0);
for (int size(*a) ; index <= size || reminder ; ++index, reminder /= BASE)
a[index] = (reminder += a[index] * b) % BASE;
*a = index - 1;
}
inline void compute (void)
{
*number = number[1] = 1;
for (int factor(2) ; factor <= n ; ++factor)
mul(number,factor);
n *= n;
for (int factor(1) ; factor <= n ; ++factor)
mul(number,2);
}
int main (void)
{
read();
compute();
print();
return 0;
}