func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( O3 )   using namespace std;   int add(int a, int b) {     long long x = a + b;     if (x >= 998244353) x -= 998244353;     if (x < 0) x += 998244353;     return x;   }   long long mul(long long a, long long b) { return (a * b) % 998244353; }   long long pw(long long a, long long b) {     long long ans = 1;     while (b) {       if (b & 1) ans = (ans * a) % 998244353;       a = (a * a) % 998244353;       b >>= 1;     }     return ans;   }   int n;   long long dp[2][1000002];   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cin >> n;     dp[1][0] = 1;     dp[0][0] = 1;     for (int i = 1; i <= n; ++i) {       int x = (i - 1);       if (x % 2 == 0) {         int par = (1 + x / 2) % 2;         dp[par][i] = mul(dp[!par][x / 2], dp[0][x / 2]);       } else {         for (int j = x / 2; j <= 1 + x / 2; j++) {           int par = (1 + j) % 2;           dp[par][i] = mul(dp[!par][j], dp[0][i - j - 1]);         }       }     }     cout << (dp[1][n] + dp[0][n]) % 998244353;     return 0;   }   