#include<bits/stdc++.h>
using namespace std;
const long long MaxV = 125005, MOD = 1e9 + 7;
long long n, dp[MaxV + 5];
void add(long long &a, long long b)
{
a += b;
if(a >= MOD) a -= MOD;
}
void input()
{
cin >> n;
}
void solve1()
{
long long sum = 0;
for(long long i = 1; i <= n; i++)
{
sum += i;
}
if(sum % 2 != 0)
{
cout << 0;
return;
}
long long target = sum / 2;
memset(dp, 0, sizeof(dp));
dp[0] = 1;
for(long long i = 1; i <= n; i++)
{
for(long long j = target; j >= i; j--)
{
add(dp[j], dp[j - i]);
}
}
cout << dp[target] * ((MOD + 1) / 2) % MOD;
}
void solve2()
{
long long sum = 0;
for(long long i = 1; i <= n; i++)
{
sum += i;
}
if(sum % 2 != 0)
{
cout << 0;
return;
}
long long target = sum / 2;
memset(dp, 0, sizeof(dp));
dp[0] = 1;
for(long long i = 1; i <= n; i++)
{
for(long long j = 0; j <= target; j++)
{
if(j >= i)
{
add(dp[j], dp[j - i]);
}
}
}
cout << dp[target] * ((MOD + 1) / 2) % MOD;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
input();
solve1();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGxvbmcgbG9uZyBNYXhWID0gMTI1MDA1LCBNT0QgPSAxZTkgKyA3Owpsb25nIGxvbmcgbiwgZHBbTWF4ViArIDVdOwoKdm9pZCBhZGQobG9uZyBsb25nICZhLCBsb25nIGxvbmcgYikKewogICAgYSArPSBiOwogICAgaWYoYSA+PSBNT0QpIGEgLT0gTU9EOwp9Cgp2b2lkIGlucHV0KCkKewogICAgY2luID4+IG47Cn0KCnZvaWQgc29sdmUxKCkKewogICAgbG9uZyBsb25nIHN1bSA9IDA7CiAgICBmb3IobG9uZyBsb25nIGkgPSAxOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBzdW0gKz0gaTsKICAgIH0KCiAgICBpZihzdW0gJSAyICE9IDApCiAgICB7CiAgICAgICAgY291dCA8PCAwOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBsb25nIGxvbmcgdGFyZ2V0ID0gc3VtIC8gMjsKCiAgICBtZW1zZXQoZHAsIDAsIHNpemVvZihkcCkpOwogICAgZHBbMF0gPSAxOwoKICAgIGZvcihsb25nIGxvbmcgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIGZvcihsb25nIGxvbmcgaiA9IHRhcmdldDsgaiA+PSBpOyBqLS0pCiAgICAgICAgewogICAgICAgICAgICBhZGQoZHBbal0sIGRwW2ogLSBpXSk7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgZHBbdGFyZ2V0XSAqICgoTU9EICsgMSkgLyAyKSAlIE1PRDsKfQoKdm9pZCBzb2x2ZTIoKQp7CiAgICBsb25nIGxvbmcgc3VtID0gMDsKICAgIGZvcihsb25nIGxvbmcgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIHN1bSArPSBpOwogICAgfQoKICAgIGlmKHN1bSAlIDIgIT0gMCkKICAgIHsKICAgICAgICBjb3V0IDw8IDA7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGxvbmcgbG9uZyB0YXJnZXQgPSBzdW0gLyAyOwoKICAgIG1lbXNldChkcCwgMCwgc2l6ZW9mKGRwKSk7CiAgICBkcFswXSA9IDE7CgogICAgZm9yKGxvbmcgbG9uZyBpID0gMTsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgZm9yKGxvbmcgbG9uZyBqID0gMDsgaiA8PSB0YXJnZXQ7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKGogPj0gaSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYWRkKGRwW2pdLCBkcFtqIC0gaV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgZHBbdGFyZ2V0XSAqICgoTU9EICsgMSkgLyAyKSAlIE1PRDsKfQoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBpbnB1dCgpOwogICAgc29sdmUxKCk7Cn0K