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[][][](5, 256, 2<<15);
	for(int i; i < 256; ++i) {
		dp[1][i][i*i] = 1;
	}
	for(int i = 1; i < 4; ++i) {
		for(int j = 1; j < 256; ++j) {
			for(int k = j; k < 256; ++k) {
				for(int l = 1; l + k*k < 2<<15; ++l) {
					dp[i+1][k][l+k*k] += dp[i][j][l];
				}
			}
		}
	}
	auto dp2 = new int[](2<<15);
	for(int i = 1; i < 5; ++i) {
		for(int j = 1; j < 256; ++j) {
			for(int k = 1; k < 2<<15; ++k) {
				dp2[k] += dp[i][j][k];
			}
		}
	}
	while(true) {
		auto n = readInt();
		if(n == 0) return;

		writeln(dp2[n]);
	}
}