Problem:
Score : 300 points

Problem Statement

Let f(n) be the number of triples of integers (x,y,z) that satisfy both of the following conditions:

1 \leq x,y,z

x^2 + y^2 + z^2 + xy + yz + zx = n

Given an integer N, find each of f(1),f(2),f(3),\ldots,f(N).

Constraints

All values in input are integers.

1 \leq N \leq 10^4

Input

Input is given from Standard Input in the following format:

N

Output

Print N lines. The i-th line should contain the value f(i).

Sample Input 1

20

Sample Output 1

0
0
0
0
0
1
0
0
0
0
3
0
0
0
0
0
3
3
0
0

For n=6, only (1,1,1) satisfies both of the conditions. Thus, f(6) = 1.

For n=11, three triples, (1,1,2), (1,2,1), and (2,1,1), satisfy both of the conditions. Thus, f(6) = 3.

For n=17, three triples, (1,2,2), (2,1,2), and (2,2,1), satisfy both of the conditions. Thus, f(17) = 3.

For n=18, three triples, (1,1,3), (1,3,1), and (3,1,1), satisfy both of the conditions. Thus, f(18) = 3.

Solution in Java (OpenJDK 11.0.6) (judge verdict: Wrong Answer)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main
{
	static long value(int n)
	{
		int[] f = new int[3];
		int i = 0;
		while(n > 0)
		{
			if((n%10) == 0)
			{
				return 0;
			}
			f[i++] = (n%10);
			n /= 10;
		}

		long ans = (f[0]*f[0]) + (f[1]*f[1]) + (f[2]*f[2]) + (f[0]*f[1]) + (f[1]*f[2]) + (f[2]*f[0]);
		return ans;
	}
	static void solve(int n, int[] solution)
	{
		for(int i=111; i<=999; i++)
		{
			long value = value(i);

			if(value <= 0)
			{
				continue;
			}
			if(value <= n)
			{
				solution[(int)value]++;
			}
		}
	}

	public static void main(String[] args)
	{
		FastReader reader = new FastReader();
		int n = reader.nextInt();
		int[] solution = new int[n+1];
		solve(n, solution);

		for(int i=1; i<=n; i++)
		{
			System.out.println(solution[i]);
		}
	}
	static class FastReader
	{
		BufferedReader br;
		StringTokenizer st;

		public FastReader()
		{
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		String next()
		{
			while (st == null || !st.hasMoreElements())
			{
				try
				{
					st = new StringTokenizer(br.readLine());
				}
				catch (IOException e)
				{
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

		int nextInt()
		{
			return Integer.parseInt(next());
		}

		long nextLong()
		{
			return Long.parseLong(next());
		}

		double nextDouble()
		{
			return Double.parseDouble(next());
		}

		String nextLine()
		{
			String str = "";
			try
			{
				str = br.readLine();
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
			return str;
		}
	}
}