Link to this code: https://cses.fi/paste/51451aacd1d26e09c80f2b/
/* 777 */
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define FAST_IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

const int MOD = 1e9 + 7;
int add(int a, int b) { return (a + b) % MOD; }
int modinv(int b) {
    int res = 1;
    int e = MOD - 2;
    while (e) {
        if (e & 1) res = res * b % MOD;
        b = b * b % MOD;
        e >>= 1;
    }
    return res;
}
int divmod(int a, int b) { return a * modinv(b) % MOD; }

vector<vector<int>> dp;
int n, offset, limit;

void solve() {
    cin >> n;
    offset = n * (n + 1) / 2; // maximum possible sum
    limit = 2 * offset;
    dp.resize(2, vector<int>(limit + 1));
    dp[(n + 1) & 1][offset] = 1;
    for (int num = n ; num > 0 ; num--) {
        fill(dp[num & 1].begin(), dp[num & 1].end(), 0);
        for (int sum = 0 ; sum <= limit ; ++sum) {
            if (sum >= num) dp[num & 1][sum] = add(dp[num & 1][sum], dp[(num + 1) & 1][sum - num]);
            if (sum + num <= limit) dp[num & 1][sum] = add(dp[num & 1][sum], dp[(num + 1) & 1][sum + num]);
        }
    }
    cout << divmod(dp[1][offset], 2);
}

int32_t main() {
    FAST_IO
    solve();
}