#ifndef ONLINE_JUDGE #define _GLIBCXX_DEBUG #endif #include #include using namespace std; using ll=long long; using ld=long double; using st=string; using P=pair; typedef atcoder::modint mint; ll inf=9e18; template constexpr auto max(T... a){return max(initializer_list>{a...});} template constexpr auto min(T... a){return min(initializer_list>{a...});} template auto vec(const ll (&sizes)[s], const T& init = T()){ if constexpr(i < s) return vector(sizes[i], vec(sizes, init)); else return init; } int main(){ cin.tie(nullptr); ios_base::sync_with_stdio(false); auto v=vec({1001},0); mint x=1; for(ll i=1;i<=1000;i++){ x*=i; v[i]=x; } ll n; cin>>n; auto dp=vec({n+1,n+1,3},0); dp[0][0][1]=1; for(ll i=1;i<=n;i++){ for(ll j=0;j<=n;j++){ if(j>0) dp[i][j][0]=dp[i-1][j-1][1]+dp[i-1][j-1][2]; dp[i][j][1]=dp[i-1][j][0]; dp[i][j][2]=dp[i-1][j][1]; } } mint ans=0; for(ll j=0;j<=n;j++){ ans+=v[j]*v[n-j]*(dp[n][j][0]+dp[n][j][1]); } if(n!=1) cout<