#include using namespace std; using ll=long long; #include #include #include #include #define pc_u putchar #pragma GCC target ("avx") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #define rep(i,a,b) for(it i=(it)(a);i<(it)b;i++) #define rep2(i,a,b,c) for(it i=(it)(a);i<(it)b;i+=(it)c) #define repp(i,a,b) for(it i=(it)(a);i<=(it)b;i++) #define repp2(i,a,b,c) for(it i=(it)(a);i<=(it)b;i+=(it)c) #define irep(i,a,b) for(int i=(int)(a);i<(int)b;i++) #define irep2(i,a,b,c) for(int i=(int)(a);i<(int)b;i+=c) #define irepp(i,a,b) for(int i=(int)(a);i<=(int)b;i++) #define irepp2(i,a,b,c) for(int i=(int)(a);i<=(int)b;i+=c) #define nrep(i,a,b) for(it i=(it)(a)-1;i>=(it)b;i--) #define nrepp(i,a,b) for(it i=(it)(a);i>=(it)b;i--) #define inrep(i,a,b) for(int i=(int)(a)-1;i>=(int)b;i--) #define inrepp(i,a,b) for(int i=(int)(a);i>=(int)b;i--) #define inrep2(i,a,b,c) for(int i=(int)(a)-1;i>=(int)b;i-=c) #define inrepp2(i,a,b,c) for(int i=(int)(a);i>=(int)b;i-=c) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define Min(x) *min_element(all(x)) #define Max(x) *max_element(all(x)) #define popcount(x) __builtin_popcountll(x) #define moda 998244353LL #define modb 1000000007LL #define modc 968244353LL #define dai 2502502502502502502LL #define sho -dai #define aoi 1e18+1e6 #define giri 1010000000 #define en (db)3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679 #define eps 1e-14 #define elif else if template using pq=priority_queue; template using pqg=priority_queue,greater>; #define uni(a) a.erase(unique(all(a)),a.end()) using it=long long; using itn=int; using un=unsigned long long; using idb=double; using db=long double; using st=string; using ch=char; using bo=bool; using P=pair; using ip=pair; using vi=vector; using ivi=vector; using ivd=vector; using vd=vector; using vs=vector; using vc=vector; using vb=vector; using vp=vector

; using ivp=vector; using sp=set

; using isp=set; using ss=set; using sca=set; using si=set; using isi=set; using svi=set; using svb=set; using vvi=vector; using ivvi=vector; using ivvd=vector; using vvd=vector; using vvs=vector; using vvb=vector; using vvc=vector; using vvp=vector; using ivvp=vector; using vsi=vector; using ivsi=vector; using isvi=set; using vsc=vector; using vsp=vector; using ivsp=vector; using vvsi=vector; using ivvsi=vector; using vvsp=vector; using ivvsp=vector; using svvb=set; using vvvi=vector; using ivvvi=vector; using ivvvd=vector; using vvvd=vector; using vvvb=vector; using ivvvp=vector; using vvvp=vector; using isvvi=set; using vvvvi=vector; using ivvvvi=vector; using vvvvd=vector; using vvvvb=vector; using ivvvvp=vector; using vvvvp=vector; using ivvvvvi=vector; using vvvvvi=vector; using ivvvvvvi=vector; using vvvvvd=vector; using vvvvvvi=vector; using ivvvvvvvi=vector; using vvvvvvd=vector; using vvvvvvvi=vector; using vvvvvvvvi=vector; st abc="abcdefghijklmnopqrstuvwxyz"; st ABC="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; st num="0123456789"; st mb="xo"; st MB="XO"; #include #include using namespace __gnu_pbds; template using ordered_multiset = tree, rb_tree_tag, tree_order_statistics_node_update>; namespace { template ostream &operator<<(ostream &os, const pair &p) { os << p.first << " " << p.second; return os; } template istream &operator>>(istream &is, pair &p) { is >> p.first >> p.second; return is; } template ostream &operator<<(ostream &os, const vector &v) { int s = (int)v.size(); for (int i = 0; i < s; i++) os << (i ? " " : "") << v[i]; return os; } template istream &operator>>(istream &is, vector &v) { for (auto &x : v) is >> x; return is; } istream &operator>>(istream &is, __int128_t &x) { string S; is >> S; x = 0; int flag = 0; for (auto &c : S) { if (c == '-') { flag = true; continue; } x *= 10; x += c - '0'; } if (flag) x = -x; return is; } istream &operator>>(istream &is, __uint128_t &x) { string S; is >> S; x = 0; for (auto &c : S) { x *= 10; x += c - '0'; } return is; } ostream &operator<<(ostream &os, __int128_t x) { if (x == 0) return os << 0; if (x < 0) os << '-', x = -x; string S; while (x) S.push_back('0' + x % 10), x /= 10; reverse(begin(S), end(S)); return os << S; } ostream &operator<<(ostream &os, __uint128_t x) { if (x == 0) return os << 0; string S; while (x) S.push_back('0' + x % 10), x /= 10; reverse(begin(S), end(S)); return os << S; } void input() {} template void input(T &t, U &...u) { cin >> t; input(u...); } template void input1(T &t, U &...u) { input(u...); } void print() { cout << "\n"; } template void print(const T &t, const U &...u) { cout << t; if (sizeof...(u)) cout << sep; print(u...); } template void print1(const T &t, const U &...u) { print(u...); } struct IoSetupNya { IoSetupNya() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(30); cerr << fixed << setprecision(7); } } iosetupnya; } //namespace Nyaan template T Sum(vector &a){ T s=0; for(auto i:a)s+=i; return s; } template T Sum(vector &a,int l,int r){ T s=0; irep(i,l,r)s+=a[i]; return s; } template void dec(vector &t,T k=1){ for(auto &i:t)i-=k; } template void inc(vector &t,T k=1){ for(auto &i:t)i+=k; } template vector make_vec(int n,T t){ vector g(n); for(auto &i:g)i=t; return g; } template vector subvec(vector a,int f,int l){ vector g(l); irep(i,f,f+l)g[i-f]=a[i]; return g; } template vector sorted(vector a){ sort(all(a)); return a; } template int lod(vector &a,T k){ auto d=lower_bound(all(a),k); int e=distance(a.begin(),d); return e; } template void za(vector &a){ int n=a.size(); map atu; irep(i,0,n)atu[a[i]]=0; int ima=0; for(auto i:atu){ atu[i.first]=ima; ima++; } irep(i,0,n)a[i]=atu[a[i]]; } template T gcda(T a,T b){ if(!a||!b)return max(a,b); if(a<0)a=-a; if(b<0)b=-b; if(a T lcma(T a,T b){ return a/gcda(a,b)*b; } template T isqrt(T n){ T u=sqrt(n); while((u+1)*(u+1)<=n)u++; while(u*u>n)u--; return u; } db distance(db a,db b,db c,db d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));} db getAngle(db xa, db ya, db xb, db yb, db xc, db yc) { //角BACを求める //E8さんの記事コピペ db VectorAB = sqrt((xb - xa) * (xb - xa) + (yb - ya) * (yb - ya)); db VectorAC = sqrt((xc - xa) * (xc - xa) + (yc - ya) * (yc - ya)); db Naiseki = (xb - xa) * (xc - xa) + (yb - ya) * (yc - ya); db cosTheta = Naiseki / (VectorAB * VectorAC); return acos(cosTheta) * 180.0 / 3.14159265358979; } long double segment_origin_dist(long double A, long double B, long double C, long double D) { // P = (A,B), Q = (C,D) long double vx = C - A, vy = D - B; // ベクトルPQ long double wx = -A, wy = -B; // ベクトルPO (O-P) long double vv = vx * vx + vy * vy; // |PQ|^2 if (vv == 0) { // P == Q の場合、点と原点の距離 return sqrt(A * A + B * B); } long double t = (wx * vx + wy * vy) / vv; // 射影パラメータ long double nx, ny; // 最近点 if (t <= 0) { nx = A; ny = B; } else if (t >= 1) { nx = C; ny = D; } else { nx = A + t * vx; ny = B + t * vy; } return sqrt(nx * nx + ny * ny); } bo outc(int n,int x){ return (x<0||x>=n); } bo outc(int h,int w,int x,int y){ return (x<0||x>=h||y<0||y>=w); } it sto(st s){ it ans=0; for(ch c:s){ ans*=10; ans+=c-'0'; } return ans; } template vector> nep(vector a){ vector> e; sort(all(a)); do{ e.emplace_back(a); }while(next_permutation(all(a))); return e; } template void chmin(T &a,T b){if(a>b)a=move(b);} template void chmax(T &a,T b){if(a fact, fact_inv, inv; /* init_nCk :二項係数のための前処理 計算量:O(n) */ void init_nCk(int SIZE){ fact.resize(SIZE+5); fact_inv.resize(SIZE+5); inv.resize(SIZE+5); fact[0]=fact[1]=1; fact_inv[0]=fact_inv[1]=1; inv[1]=1; irepp(i,2,SIZE+4){ fact[i]=fact[i-1]*i%nCkMOD; inv[i]=nCkMOD-inv[nCkMOD%i]*(nCkMOD/i)%nCkMOD; fact_inv[i]=fact_inv[i-1]*inv[i]%nCkMOD; } } /* nCk :MODでの二項係数を求める(前処理 int_nCk が必要) 計算量:O(1) */ it nCk(int n, int k){ if(n1){ int m=(l+r)/2; if(n>=(1LL<>=1; } return res; } random_device seed_gen; mt19937_64 engine(seed_gen()); ll randint(ll l,ll r){return l+engine()%(r-l);} bo prime_checker(it n){ if(n==2)return 1; if(n==1||!(n&1))return 0; it s=0; while(((n-1>>s+1)<>s); vi A={2,3,5,7,11,13,17,19,23}; for(it a:A){ if(a==n)return 1; if(a>n)break; __int128_t r=mod_pow(a,d,n); if(r==1)continue; bo ok=1; irep(i,0,s){ if(r==n-1){ ok=0; break; } r=(r*r)%n; } if(ok)return 0; } return 1; } __int128_t fact_f(__int128_t x,__int128_t n,__int128_t c){return (x*x+c)%n;} vi factrize(it N){ if(!(N&(N-1))){ vi x; while(N!=1){ x.emplace_back(2); N/=2; } return x; } __int128_t n=N; if(n==1)return vi{}; if(prime_checker(N))return vi{N}; irep(p,0,1000){ __int128_t x=randint(0,n),y=x,c=randint(1,n); rep(i,1,35000){ x=fact_f(x,n,c),y=fact_f(fact_f(y,n,c),n,c); __int128_t d=gcda(abs((it)x-(it)y),N); if(d==n)break; if(d!=1){ vi l=factrize(d),r=factrize(N/d); vi x;int u=0,v=0; while(u!=l.size()||v!=r.size()){ if(u!=l.size()&&(v==r.size()||l[u] struct dijk{ private: int n; vector>> g; public: dijk(int _n){ n=_n; g.resize(_n); } dijk(vector>>& _g){ n=_g.size(); g=_g; } void add(int u,int v,W w){ g[u].emplace_back(v,w); } vector dist(int f){ vector d(n,-1);vb s(n);pqg> que; d[f]=0;que.push({0,f}); while(que.size()){ int u=que.top().second;que.pop(); if(s[u])continue; s[u]=1; for(auto [v,w]:g[u]){ if(d[v]==-1||d[v]>d[u]+w){ d[v]=d[u]+w; que.push({d[v],v}); } } } return d; } W dist(int f,int t){return dist(f)[t];} }; struct LCA{ private: int n,m; ivvi g,dp; void md(){ dp.resize(m); irep(i,0,m)dp[i].resize(n); dp[0]=p; irep(k,0,m-1) irep(i,0,n) if(dp[k][i]!=-1)dp[k+1][i]=dp[k][dp[k][i]]; else dp[k+1][i]=-1; irep(i,0,n){ int a=0,u=i; inrep(k,m,0) if(dp[k][u]!=-1)a+=(1<d[v])swap(u,v); int l=d[u],r=d[v]; inrep(i,m,0){ if((d[v]-d[u])&(1<=2)p=1; a[u]=p; } void dfs2(int u){ s[u]=is; for(int v:h[u]){ if(s[v]==-1){ dfs2(v); } } } bo check(int u,int v){ if(o[u]>o[v])swap(u,v); return o[u] class dynamic_segtree{ public: dynamic_segtree(size_t n):n(n),root(nullptr){} void set(size_t p,T x){set(root,0,n,p,x);} T get(size_t p){return get(root,0,n,p);} T prod(size_t l,size_t r){return prod(root,0,n,l,r);} private: struct node{ T value; node* left; node* right; node(T value):value(value),left(nullptr),right(nullptr){} }; size_t n; node* root; void set(node*& t,size_t a,size_t b,size_t p,T x){ if(!t)t=new node(E()); if(b-a==1){ t->value=x; return; } size_t c=(a+b)>>1; if(pleft,a,c,p,x); else set(t->right,c,b,p,x); t->value=E(); if(t->left)t->value=Op(t->left->value,t->value); if(t->right)t->value=Op(t->value,t->right->value); } T get(node*& t,size_t a,size_t b,size_t p){ if(!t)return E(); if(b-a==1)return t->value; size_t c=(a+b)>>1; if(pleft,a,c,p); else return get(t->right,c,b,p); } T prod(node*& t,size_t a,size_t b,size_t l,size_t r){ if(!t||b<=l||r<=a)return E(); if(l<=a&&b<=r)return t->value; size_t c=(a+b)>>1; return Op(prod(t->left,a,c,l,r),prod(t->right,c,b,l,r)); } }; #include using namespace atcoder; using mints=modint998244353; using mint=modint; using minto=modint1000000007; using vm=vector; using vms=vector; using vmo=vector; using vvm=vector; using vvms=vector; using vvmo=vector; using vvvm=vector; using vvvms=vector; using vvvmo=vector; using vvvvm=vector; using vvvvms=vector; using vvvvmo=vector; using vvvvvm=vector; using vvvvvms=vector; using vvvvvmo=vector; using vvvvvvm=vector; using vvvvvvms=vector; using vvvvvvmo=vector; using vvvvvvvms=vector; using vvvvvvvmo=vector; /*総和をもとめるセグ木 struct nod{ it val; nod(it v=0):val(v){} }; nod op(nod a,nod b){return nod(a.val+b.val);} nod e(){return nod(0);} struct act{ it a; act(it e=0):a(e){} }; nod mapping(act f,nod x){return nod(f.a+x.val);} act comp(act f,act g){return act(f.a+g.a);} act id(){return act(0);}*/ //#define endl '\n' //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") const int dx[8]={0,1,0,-1,1,-1,-1,1}; const int dy[8]={1,0,-1,0,1,-1,1,-1}; void solve(){ vi a={353412483,499853409,198066141,65944976,0,0,83359314,197704749,499956396,461596998,499924557,250031589,66025737,0,0,65922195,197880351,395804754,461671050,395752629,197825844,65951319,0,0,65936360,197777304,499639056,583029498,395715012,249552855,66073349,0,0,66026043,197876565,395514645,582863367,303214194,249900573,66080034,0,0,65941840,249952551,395548158,583092006,395796816,250096923,83408904,0,0,83352606,197785611,395734917,461688090,395834907,197910177,65958885,0,0,83129445,197879421,395601315,583179990,499975596,197894460,83217288,0,0,65851552,197977152,395723337,461598072,499492386,151682058,83391159,0,0,65982393,197810568,499698792,461615477,499465320,197929308,83479962,0,0,66034772,249868407,395609340,461586120,395850384,197943681,65989561,0,0,66018201,249605913,395763186,461545017,500244135,250121904,65992770,0,0,83439696,197582427,395906010,461534357,395972283,249747105,50667829,0,0,65970890,197840178,395783145,582714366,395839320,249607272,66034569,0,0,65970813,197862537,499837770,461586033,395704725,197937468,66025153,0,0,65971953,197855130,499324197,461779937,395694588,250272546,83394459,0,0,65931391,250137234,395347209,461799958,395664129,198104688,83187177,0,0,65844093,197915487,395640954,461877100,499267476,197996145,83116794,0,0,83077128,197816517,395716419,583089981,395680647,197847309,66034770,0,0,65927544,197856531,395729877,582755274,395784210,197870754,83518725,0,0,83482623,197741811,500063223,461407793,395845749,197818044,66124482,0,0,83419152,197585898,395806743,461487779,396117981,249519294,66035306,0,0,83193621,249380424,395683833,461503212,500027589,197855943,65988450,0,0,65930507,197764092,395690775,461566449,499518105,197901777,65986020,0,0,65933772,250096410,395624835,583102701,395703927,197915679,65987298,0,0,50523021,249970845,395405595,461756184,395565168,198146163,83144547,0,0,65983467,249543381,499087524,461617473,395695518,250057275,65957211,0,0,65974043,197782437,395546595,461593956,395765376,249800436,65946828,0,0,83100603,197759865,499933236,461658190,499637970,197937693,65994989,0,0,83165199,151389405,499921449,461545845,395752965,197762508,66111248,0,0,83355123,197818980,499370913,582628467,395794911,197844207,83457036,0,0,66017907,197835168,395622237,461486226,395661093,197892921,83237010,0,0,83211351,249550986,395580453,582788094,395923029,249712644,66025575,0,0,65897514,249726033,302922846,583014219,395884293,197863206,65933645,0,0,65893369,250099782,395686374,582793884,499733808,197928006,66021523,0,0,66010887,197890128,395726169,461611814,395609376,197826183,66037128,0,0,65941779,249662991,499401411,461547663,499391031,198039087,83234613,0,0,66018343,197644773,499469412}; int n;input(n); print(a[n]); } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); //mae(); int t=1;//input(t); while(t--)solve(); }