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 C++ (GCC 9.2.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef map<int,int> mkmap;
typedef vector<int> vi;
typedef vector<string> vs;
typedef vector<pii> vp;
typedef vector<vi> vv;

#define fast ios_base::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)
const ll mod=1000000007;
const int sz=1000001;
#define endl "\n"
#define all(a) (a).begin(),(a).end()
#define rep(i,a,b) for(i=a;i<b;++i)
#define rrep(i,a,b) for(i=a;i>=b;--i)
#define F first
#define S second
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define db(x) cout << (#x) << " = " << x << endl;

inline ll mult(ll a, ll b) {return (((a % mod) * (b % mod)) % mod);}

int f(vi x){
    return x[0]*x[0]+x[1]*x[1]+x[2]*x[2]+x[0]*x[1]+x[1]*x[2]+x[2]*x[0];
}

int main(){
    fast;
    int t,tt,tti,n,m,x,y,z,i,j,k,count,o,e,ans,sum,l,r,mx,mn;
    ll lx,ly,lz,ltemp;
    double fx,fy,fz;
    string s;
    
    queue<vector<int> > q;
    map<vi,bool> mp;
    vi temp;
    temp.pb(1);
    temp.pb(1);
    temp.pb(1);
    q.push(temp);

    cin>>n;
    vi a(n+1);
    while(!q.empty()){
        temp=q.front();
        sort(all(temp));
        q.pop();
        if(mp[temp]) continue;
        mp[temp]=true;
        x=f(temp);
        if(x<=n){
            // for(auto p:temp) cout<<p<<" ";
            // cout<<endl;
            if(temp[0]==temp[1] && temp[0]==temp[2]) a[x]+=1;
            else if(temp[0]==temp[1] || temp[1]==temp[2]) a[x]+=3;
            else a[x]+=6;
            rep(i,0,3){
                temp[i]++;
                q.push(temp);
                temp[i]--;
            }
        }
    }
    rep(i,1,n+1) cout<<a[i]<<endl;
}