rt,25分
#include<bits/stdc++.h>
#include<string>
using namespace std;
int n;
string ans;
string add(string a, string b) {
string res = "";
if(a.size() > b.size()) {
swap(a, b);
}
for(int i = 1; a.size() < b.size(); i++) {
a = '0' + a;
}
for(int i = b.size() - 1; i >= 0; i--) {
res += (b[i] - '0') + (a[i] - '0') + '0';
}
for(int i = 0; i < res.size(); i++) {
if(res[i] > '9') {
res[i] -= 10;
res[i + 1]++;
}
}
while(res.size() > 0 && res[res.size() - 1] == '0') {
res.erase(res.size() - 1);
}
reverse(res.begin(), res.end());
return res;
}
string mul(string a, string b) {
string res = "";
res.resize(a.size() + b.size());
for(int i = 0; i < res.size(); i++) {
res[i] = '0';
}
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
for(int i = 0; i < a.size(); i++) {
for(int j = 0; j < b.size(); j++) {
int x = (a[i] - '0') * (b[j] - '0');
res[i + j] += x % 10;
res[i + j] = (res[i + j] - '0') % 10 + '0';
res[i + j + 1] += x / 10;
}
}
while(res.size() > 0 && res[res.size() - 1] == '0') {
res.erase(res.size() - 1);
}
reverse(res.begin(), res.end());
return res;
}
int main() {
cin >> n;
string x = "1", ans = "0";
for(int i = 1; i <= n; i++) {
x = mul(x, to_string(i));
ans = add(ans, x);
}
cout << ans;
return 0;
}