/*
ID: fniksic001
PROG: subset
LANG: C++
*/

#include <fstream>
#include <algorithm>

using namespace std;

const int maxN = 39;
const int maxHalfsum = maxN*(maxN+1)/4;

unsigned long table[maxN+1][maxHalfsum+1];

int main() {
    ifstream in("subset.in");
    ofstream out("subset.out");

    int N, halfsum;
    in >> N;
    /* If N=4k+1 or N=4k+2 then obviously no such partition
     * can exist. (The sum 1+2+...+N is odd.) */
    if (N%4==1 || N%4==2) {
	out << 0 << endl;
	return 0;
    }
    
    halfsum = N*(N+1)/4;
    table[0][0] = 1;
    for (int i = 1; i <= N; ++i)
	for (int j = 0; j <= min(i*(i+1)/2, halfsum); ++j)
	    table[i][j] = table[i-1][j] + (j-i>=0 ? table[i-1][j-i] : 0);
    out << table[N][halfsum]/2 << endl;

    return 0;
}
