#include <bits/stdc++.h>
    using namespace std;
    typedef unsigned long long ull;
    typedef long long ll;
    typedef long double ld;
    #define in_arr(name,size) for(int i = 0;i<size;i++)\
    cin >> name[i];
    #define QUICK ios_base::sync_with_stdio(0);cout << fixed;

    string upper(string);
    string lower(string);
    bool isalup(string);
    bool isalow(string);
    /*
    class node{
    public:
        int val;
        node* next;
        node(int a){
            next = NULL;
            val = a;
        }
        ~node(){
            cout << "One node is removed\n";
        }
    };

    class linklist{
        public:
        node*head = NULL;
        node* tail;
        void add(int a){
            node*temp = new node(a);
            temp->next = head;
            head = temp;
            if(size()==1)
                tail = head;
        }
       bool isempty(){
            return head == NULL;
        }
        void remove_front(){
            node* temp = head;
            head = head->next;
            delete temp;
        }
        void remove_val(int a){
            if(!detect(a)){
                cout << "Element not founded\n";
                return;
            }
            cout << "akan ada node yang akan dihapus\n";
            node* temp = head;
            node* dummy = new node(0);
            dummy->next = head;
            node*temp_2 = dummy;

            while(temp&&temp_2){
                if(temp->val==a)
                {
                    node* temp_3 = temp;
                    temp_2->next = temp->next;
                    if(temp->next==NULL)
                        break;
                    temp = temp->next->next;
                    delete temp_3;
                    continue;
                }
                temp_2 = temp_2->next;
                temp = temp->next;
            }

            delete dummy;
        }
        ~linklist(){
            while(!isempty()){
                remove_front();
            }
        }
        bool detect(int a){
            node* temp = head;
            while(temp!=NULL){
                if(temp->val==a)
                    return true;
                temp = temp->next;
            }
            return false;
        }
        int size(){
            int a = 0;
            node*temp = head;
            while(temp){
                a++;
                temp = temp->next;
            }
            return a;
        }

    };*/

    int main(){

        int a,ans = 0;
            cin >> a;
        vector<int>wow(a+1);
    
        for(int i = 1;i<=100;i++){
            for(int j = 1;j<=100;j++){
                for(int k = 1;k<=100;k++){
                    int val = i*i+j*j+k*k+i*k+i*j+j*k;
                    if(val>a)
                        continue;
                    wow[val]++;
                }
            }
        }

        for(int i = 1;i<=a;i++){
            cout << wow[i] << endl;
        }
        /* cout << "TES\n";
        linklist one;
        cout << "TES\n";
        one.add(20);
        cout << "TES\n";
        one.add(50);
        cout << "TES\n";
        one.add(100);
        cout << "TES\n";
        one.add(20);
        cout << "TES\n";
        one.remove_val(20);
        cout << "TES\n";
        cout << "Size linked list :" << one.size() << endl;*/

        return 0;
    }









    string upper(string a){
        for(char& c:a){
            if(islower(c))
                c -= 32;
           }
        return a;
    }
        string lower(string a){
            for(char& c : a){
                if(isupper(c))
                    c += 32;
            }
            return a;
        }
        bool isalup(string a){
            for(char& c: a){
                if(islower(c))
                    return false;
            }
            return true;
        }
        bool isalow(string a){
            for(char& c:a){
                if(isupper(c))
                    return false;
            }
           return true;
        }


Measured memory_bytes: 3612