#include #include using namespace std; void solve(){ using ll=long long; using mint=atcoder::modint998244353; ll n; cin>>n; int log=62; mint ans=0; auto f=[&](int k){ vector dp(log+1,vector(log+1,vector(2))); dp[log][0][1]=1; for (int i=log-1;i>=0;i--){ for (int p=0;p<=log;p++){ for (int j:{0,1}){ int np=p+j; if (np>log) continue; if (i==k&&j==0) continue; if ((n>>i&1)==j){ dp[i][np][1]+=dp[i+1][p][1]; dp[i][np][0]+=dp[i+1][p][0]; } else if ((n>>i&1)>i&1)>j){ dp[i][np][0]+=dp[i+1][p][0]; dp[i][np][0]+=dp[i+1][p][1]; } } } } mint cnt=0; for (int i=0;i<=log;i++){ mint s=dp[0][i][0]+dp[0][i][1]; cnt+=(s+1)*s/2; } ans+=(1LL<