#include <vector>
using namespace std;
int main()
{
vector<int>* vecData = new vector<int>;
int length = 40000; // 결과값의 자리수
vecData->reserve(length);
vecData->assign(length, -1);
int n = 1000;
int carry = 0;
(*vecData)[0] = 1;
int offset = 1;
for(int i=2;i <= n;i++){
for(int j=0;j < offset;j++){
(*vecData)[j] = (*vecData)[j] * i + carry;
carry = 0;
if((*vecData)[j] > 9){
if((*vecData)[j+1] == -1){
offset++;
(*vecData)[j+1] = 0;
}
carry = (*vecData)[j] / 10;
(*vecData)[j] = (*vecData)[j] % 10;
}
}
}
for(int i=0;i < offset;i++){
cout << (*vecData)[offset-i-1];
}
delete vecData;
return 0;
}