import std.stdio;
import std.algorithm;
import std.string;
import std.range;
import std.array;
import std.conv;
import std.complex;
import std.math;
import std.ascii;
import std.bigint;
import std.container;
import std.typecons;

auto readInts() {
	return array(map!(to!int)(readln().strip().split()));
}
auto readInt() {
	return readInts()[0];
}
auto readLongs() {
	return array(map!(to!long)(readln().strip().split()));
}
auto readLong() {
	return readLongs()[0];
}

const real eps = 1e-10;

void main(){
	auto dp = new int[1001][1001];
	for(int i = 1; i <= 1000; ++i) {
		for(int j = i; j <= 1000; ++j) {
			dp[i][j] = dp[i][j-1] + j;
		}
	}
	auto l = new int[1000001];
	for(int i; i <= 1000; ++i) {
		for(int j; j <= 1000; ++j) {
			++l[dp[i][j]];
		}
	}
	while(true) {
		auto N = readInt();
		if(N == 0) {
			return;
		}
		writeln(l[N]-1);
	}
}