#include <iostream>
#include <cstdio>
using namespace std;

const int MAXN = 1000001;
const int MOD = 1000000000;
int dp[MAXN];

int main() {
    int n;
    scanf("%d", &n);

    // 初始化 dp 数组
    for (int i = 0; i <= n; i++) {
        dp[i] = 0;
    }
    dp[0] = 1; // 数字 0 的拆分方案数为 1

    // 遍历所有 2 的幂
    for (int pos = 0; (1ll << pos) <= n; pos++) {
        long long temp = 1ll << pos; // 计算 2^pos
        for (int j = temp; j <= n; j++) {
            dp[j] = (dp[j] + dp[j - temp]) % MOD;
        }
    }

    printf("%d\n", dp[n]);
    return 0;
}