#include <iostream>
using namespace std;
std::uint64_t fact[501] = {0};
std::uint64_t factorial(int n)
{
if(n==0 || n==1)
return 1;
if(fact[n]>1)
return fact[n];
if ((fact[n]=n*factorial(n-1))>=1000000007)
{
cout<<"before fact[" << n << "] = " << fact[n] << endl;
fact[n] = fact[n] % 1000000007;
cout<<"after fact[" << n << "] = " << fact[n] << endl;
}
return fact[n];
}
int main()
{
int n = 14;
cout<<"1"<<endl;
cout<<factorial(n)<<endl;
cout<<"4"<<endl;
cout << fact[n] << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0ZDo6dWludDY0X3QgZmFjdFs1MDFdID0gezB9OwoKc3RkOjp1aW50NjRfdCBmYWN0b3JpYWwoaW50IG4pCnsKICAgIGlmKG49PTAgfHwgbj09MSkKICAgICAgICByZXR1cm4gMTsKICAgIGlmKGZhY3Rbbl0+MSkKICAgICAgICByZXR1cm4gZmFjdFtuXTsKCiAgICBpZiAoKGZhY3Rbbl09bipmYWN0b3JpYWwobi0xKSk+PTEwMDAwMDAwMDcpCiAgICB7CiAgICAJY291dDw8ImJlZm9yZSBmYWN0WyIgPDwgbiA8PCAiXSA9ICIgPDwgZmFjdFtuXSA8PCBlbmRsOwogICAgICAgIGZhY3Rbbl0gPSBmYWN0W25dICUgMTAwMDAwMDAwNzsKICAgIAljb3V0PDwiYWZ0ZXIgZmFjdFsiIDw8IG4gPDwgIl0gPSAiIDw8IGZhY3Rbbl0gPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiBmYWN0W25dOwp9CgppbnQgbWFpbigpCnsKICAgIGludCBuID0gMTQ7CiAgICBjb3V0PDwiMSI8PGVuZGw7CiAgICBjb3V0PDxmYWN0b3JpYWwobik8PGVuZGw7CiAgICBjb3V0PDwiNCI8PGVuZGw7CiAgICBjb3V0IDw8IGZhY3Rbbl0gPDwgZW5kbDsKICAgIHJldHVybiAwOwp9Cg==