#include using namespace std; using ll=long long; #include using mint=atcoder::modint998244353; int main(){ int ttt; cin>>ttt; ll maxm=1e7; vector is_prime(maxm+1,true); for(int i=2;i<=maxm;i++){ if(is_prime[i]){ for(int j=i+i;j<=maxm;j+=i)is_prime[j]=false; } } vector cnt(maxm+1),cnt2(maxm+1); for(int i=2;i<=maxm;i++){ cnt[i]=cnt[i-1]; if(is_prime[i])cnt[i]++; cnt2[i]=cnt2[i-1]; if(i>3&&is_prime[i]&&is_prime[i-2]&&(i^(i-2))==2){ //if(i<30)cout<>n>>m; if(n==1){ cout<> a(3,vector(3)),res(3,vector(3)); for(int i=0;i<3;i++)for(int j=0;j<3;j++){ if(i!=j)a[i][j]=1; } a[0][1]=cnt2[m]; a[0][2]=cnt2[m]; for(int i=0;i<3;i++)res[i][i]=1; n--; while(n>0){ if(n&1){ vector> nres(3,vector(3)); for(int i=0;i<3;i++)for(int j=0;j<3;j++)for(int k=0;k<3;k++)nres[i][j]+=a[i][k]*res[k][j]; res=move(nres); } vector> na(3,vector(3)); for(int i=0;i<3;i++)for(int j=0;j<3;j++)for(int k=0;k<3;k++)na[i][j]+=a[i][k]*a[k][j]; a=move(na); n>>=1; } mint ans=0; for(int i=0;i<3;i++)for(int j=0;j<3;j++){ if(i==0)ans+=res[i][j]; else ans+=res[i][j]*cnt2[m]; } cout<