#include <fstream>
//#include <algorithm>
using namespace std;
const int mod = 999017;
/*int n;
int v[105];
inline int invs () {
int ans = 0;
for (int i = 1; i <= n; ++ i)
for (int j = i + 1; j <= n; ++ j)
ans += (v[i] > v[j]);
return ans;
}
bool viz[105];
inline int ciclii () {
for (int i = 1; i <= n; ++ i)
viz[i] = false;
int ans = 0, j;
for (int i = 1; i <= n; ++ i)
if (!viz[i]) {
++ ans;
j = i;
while (!viz[j]) {
viz[j] = true;
j = v[j];
}
}
return ans;
}
int det (int x) {
n = x;
for (int i = 1; i <= n; ++ i)
v[i] = i;
int ans = 0;
do {
if (invs() == n - ciclii())
++ ans;
} while (next_permutation(v + 1, v + n + 1));
return ans;
}*/
int ans[1005];
int main()
{
ifstream cin("sortari2.in");
ofstream cout("sortari2.out");
//for (int i = 1; i <= 12; ++ i)
// cout << i << ' ' << det(i) << endl;
int n = 0;
cin >> n;
ans[1] = 1;
ans[2] = 2;
int fact = 1 + (n > 1);
for (int i = 3; i <= n; ++ i) {
ans[i] = (ans[i - 1] * 3 + mod - ans[i - 2]) % mod;
fact = (fact * i) % mod;
}
cout << (fact + mod - ans[n]) % mod << '\n';
cin.close();
cout.close();
return 0;
}