#if 0
    clear
    g++ -std=c++17 -O2 -Wall -lm "$0" && ./a.out
    exit
#endif
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define _USE_MATH_DEFINES
#define endl '\n'
#define pb push_back
#define fir first
#define sec second
#define ins insert
#define umap map
#define unordered_map map
#define mset multiset
#define all(x) x.begin(), x.end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<long long> vll;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
const int INF = 0x3f3f3f3f;
const int MAXN = 2e5 + 10;
const int MOD = 1e9 + 7;
const long long INFLL = 0x3f3f3f3f3f3f3f3f;
long long TESTCASE_NUM = 1;
clock_t CLOCK_START_TIME = clock();
template <typename T>
inline void _read(T &x) { cin >> x; }
inline void _read(int &x) { scanf("%d", &x); }
inline void _read(long long &x) { scanf("%lld", &x); }
inline void _read(float &x) { scanf("%f", &x); }
inline void _read(double &x) { scanf("%lf", &x); }
inline void _read(char &x) { x = getchar(); }
inline void _read(char *x) { scanf("%s", x); }
inline void read() {}
template <typename T, typename... U>
inline void read(T &head, U &... tail)
{
    _read(head);
    read(tail...);
}
template <typename T>
inline void _write(const T &x) { cout << x; }
inline void _write(const int &x) { printf("%d", x); }
inline void _write(const long long &x) { printf("%lld", x); }
inline void _write(const float &x) { printf("%.6f", x); }
inline void _write(const double &x) { printf("%.8lf", x); }
inline void _write(const char &x) { putchar(x); }
inline void _write(const char *x) { printf("%s", x); }
inline void write() {}
template <typename T, typename... U>
inline void write(const T &head, const U &... tail)
{
    _write(head);
    write(tail...);
}
inline void debug() {}
#ifdef _USE_DEBUG
template <typename T, typename... U>
inline void debug(const T &head, const U &... tail)
{
    _write("\033[1m\033[33m\33[4m");
    write(head, tail...);
    _write("\033[0m");
    // system("sleep 1");
}
#else
template <typename T, typename... U>
inline void debug(const T &head, const U &... tail)
{
}
#endif
void solve();
template <typename T1, typename T2>
inline T1 max(T1 a, T2 b) { return a < b ? b : a; }
template <typename T1, typename T2>
inline T1 min(T1 a, T2 b) { return a < b ? a : b; }
template <typename T>
inline bool isprime(T p)
{
    if (p == 2 || p == 3)
        return 1;
    if (p < 2 || (p % 6 != 1 && p % 6 != 5))
        return 0;
    for (T i = 5; i * i <= p; i = i + 6)
        if (p % i == 0 || p % (i + 2) == 0)
            return 0;
    return 1;
}

// Unordered_map can have O(n) complexity in some cases, use map instead.
// To NOT replace unordered_map with map, use the following lines.
#if 0
#define _USE_UNORDERED_MAP
#undef unordered_map
#undef umap
#define umap unordered_map
#endif

// Using long long globally can have undesirable side effects.
// To replace int with long long, use the following lines.
#if 0
#define _USE_LONG_LONG
#define int long long
#define pii pair<long long, long long>
#define vi vector<long long>
#define INF 0x3f3f3f3f3f3f3f3f
#endif

void DISPLAY_DEBUG_INFO()
{
#ifdef _USE_DEBUG
    printf("\n\033[1m\033[32m=> \033[1m\033[33m%ld\033[1m\033[32m ms used. ", clock() - CLOCK_START_TIME);
#endif
#if (defined _USE_LONG_LONG) && (defined _USE_DEBUG)
    printf("\033[1m\033[32mAll \033[1m\033[33mint\033[1m\033[32m has been replaced by \033[1m\033[33mlong long\033[1m\033[32m.\033[0m ");
#endif
#if (!defined _USE_UNORDERED_MAP) && (defined _USE_DEBUG)
    printf("\033[1m\033[32mAll \033[1m\033[33munordered_map\033[1m\033[32m has been replaced by \033[1m\033[33mmap\033[1m\033[32m.\033[0m ");
#endif
#ifdef _USE_DEBUG
    printf("\033[0m\n\n");
#endif
}

signed main()
{
#ifdef _USE_FILEIO
    freopen("in1.txt", "r", stdin);
    // freopen("l.txt", "p[3]", stdout);
#endif
    // scanf("%lld\n", &TESTCASE_NUM);
    while (TESTCASE_NUM--)
        solve();
    DISPLAY_DEBUG_INFO();
    return 0;
}

ll a[11000];

void solve()
{
    fill(a, a + 10010, 0);
    ll n;
    read(n);
    for (ll i = 1; i <= 100; i++)
    {
        for (ll j = 1; j <= 100; j++)
        {
            for (ll k = 1; k <= 100; k++)
            {
                ll ans = i * i + j * j + k * k + i * j + i * k + j * k;
                if (ans <= 10000 && ans > 0)
                    a[ans]++;
            }
        }
    }
    for (int i = 1; i <= n; i++)
    {
        write(a[i], endl);
    }
    // write(endl);
}

Measured memory_bytes: 3808