// Original C++ solution (slower):
#ifdef _MSC_VER

#include "stdc++.h"

#endif

#ifdef __GNUC__

#include<bits/stdc++.h>

#endif

using namespace std;



using ll = long long;



//vector

using vi = vector<int>;

using vii = vector<vi>;

using vll = vector<ll>;

using vvll = vector<vll>;



//constant

const double EPS = 1e-10;



#define REP(i, n) for (ll i = 0; i < n; i++)

#define FOR(i, s, e) for (ll i = s; i < e; i++)

#define ALL(x) (x).begin(),(x).end()

#define RALL(x) (x).rbegin(), (x).rend()



//debug

#define DUMP(x)  cerr << #x << " = " << (x) << endl;

#define DEBUG(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ")" << endl;



// vector

//template<typename T> vector<vector<T>> vv(ll H, ll W, T v) { return vector<vector<T>> vec(H, vector<T>(W, v)); }



// view vector

template<typename T> void view(T e) { cout << e << endl; }

template<typename T> void view(const vector<T>& v) { for (const auto& e : v) { cout << e << " "; } cout << endl; }

template<typename T> void view(const vector<vector<T> >& vv) { for (const auto& v : vv) { view(v); } }



// DP

template<class T>bool chmax(T& a, const T& b) { if (a < b) { a = b; return 1; } return 0; }

template<class T>bool chmin(T& a, const T& b) { if (b < a) { a = b; return 1; } return 0; }









// ***************************************



ll f(ll x, ll y, ll z){

    return x * x + y * y + z * z + x * y + y * z + z * x;

}



int main(){



    int N;

    cin >> N;



    vll cnt(N + 1, 0);



    FOR(x, 1, 101) FOR(y, 1, 101) FOR(z, 1, 101){

        ll ans = f(x, y, z);

        if (ans <= N) cnt[ans]++;

    }



    FOR(i, 1, N + 1) cout << cnt[i] << endl;



    return 0;

}


// Optimized solution to the same problem (faster):
#ifdef _MSC_VER

#include "stdc++.h"

#endif

#ifdef __GNUC__

#include<bits/stdc++.h>

#endif

using namespace std;



using ll = long long;



//vector

using vi = vector<int>;

using vii = vector<vi>;

using vll = vector<ll>;

using vvll = vector<vll>;



//constant

const double EPS = 1e-10;



#define REP(i, n) for (ll i = 0; i < n; i++)

#define FOR(i, s, e) for (ll i = s; i < e; i++)

#define ALL(x) (x).begin(),(x).end()

#define RALL(x) (x).rbegin(), (x).rend()



//debug

#define DUMP(x)  cerr << #x << " = " << (x) << endl;

#define DEBUG(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ")" << endl;



// vector

//template<typename T> vector<vector<T>> vv(ll H, ll W, T v) { return vector<vector<T>> vec(H, vector<T>(W, v)); }



// view vector

template<typename T> void view(T e) { cout << e << endl; }

template<typename T> void view(const vector<T>& v) { for (const auto& e : v) { cout << e << " "; } cout << endl; }

template<typename T> void view(const vector<vector<T> >& vv) { for (const auto& v : vv) { view(v); } }



// DP

template<class T>bool chmax(T& a, const T& b) { if (a < b) { a = b; return 1; } return 0; }

template<class T>bool chmin(T& a, const T& b) { if (b < a) { a = b; return 1; } return 0; }









// ***************************************





int main(){



    int N;

    cin >> N;



    vi A(N + 1, 0);



    ll MAX = sqrt(N) + 1;

    FOR(x, 1, MAX) FOR(y, 1, MAX) FOR(z, 1, MAX){

        ll n = (x*x + y*y + z*z + x*y + y*z + z*x);

        if (n <= N) A[n]++;

    }



    FOR(i, 1, N + 1){

        cout << A[i] << endl;

    }



    return 0;

}


// Fastest known solution for this problem: