#include <bits/stdc++.h>
const int MOD = 998244353;
inline int lgput(int a, int b) {
  int ans = 1;
  while (b > 0) {
    if (b & 1) ans = (1LL * ans * a) % MOD;
    b >>= 1;
    a = (1LL * a * a) % MOD;
  }
  return ans;
}
inline void mod(int &x) {
  if (x >= MOD) x -= MOD;
}
inline void add(int &x, int y) {
  x += y;
  mod(x);
}
inline void sub(int &x, int y) {
  x += MOD - y;
  mod(x);
}
inline void mul(int &x, int y) { x = (1LL * x * y) % MOD; }
inline int inv(int x) { return lgput(x, MOD - 2); }
using namespace std;
map<pair<int, int>, bool> vis;
map<pair<int, int>, int> dp;
int solve(int l, int r, int par) {
  if (l > r) return 1;
  if (l == r) {
    return (l % 2 != par % 2) || par == -1;
  }
  if (vis[{l, r}]) {
    return dp[{l, r}];
  }
  vis[{l, r}] = 1;
  if ((r - l + 1) & 1) {
    int mid = (r + l) / 2;
    if (par == -1 || (mid & 1) != par) {
      return dp[{l, r}] = (1LL * solve(l, mid - 1, mid & 1) *
                           solve(mid + 1, r, 1 - mid & 1)) %
                          MOD;
    }
    return 0;
  } else {
    int ans = 0;
    for (int i = (l + r) / 2; i <= (l + r) / 2 + 1; i++) {
      if (par == -1 || par != (i & 1)) {
        ans =
            (ans + 1LL * solve(l, i - 1, i & 1) * solve(i + 1, r, 1 - i & 1)) %
            MOD;
      }
    }
    return dp[{l, r}] = ans;
  }
}
int main() {
  int n;
  ios::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  cin >> n;
  cout << solve(1, n, -1);
  return 0;
}
