
long solve(long n){
	long cnt;
	for(long x=1; x*(x+2)+3<=n;x++){
		for(long y=1; (x^^2+y^^2+1+x*y+y+x)<=n; y++){
			long z=1;
			while(x^^2+y^^2+1+x*y+y*z+z*x<=n){
				if(x^^2+y^^2+z^^2+x*y+y*z+z*x==n)cnt++;
				z++;
			}	
		}
	}
	return cnt;
}

void main(){
	long n = _scan!long();
	foreach(i; 1..n+1){
		solve(i).writeln();
	}
}

import std.stdio, std.conv, std.algorithm, std.numeric, std.string, std.math;

// 1要素のみの入力
T _scan(T= int)(){
	return to!(T)( readln().chomp() );
}

// 1行に同一型の複数入力
T[] _scanln(T = int)(){
	T[] ln;
	foreach(string elm; readln().chomp().split()){
		ln ~= elm.to!T();
	}
	return ln;
}
