### BUGGY CODE ###

def resolve():
    import sys
    sys.setrecursionlimit(10 ** 6)  # 再帰関数の再帰の深さを設定
    to_index = lambda x: int(x) - 1  # 入力した数字に1を引いたものを返す
    print_list_in_2D = lambda x: print(*x, sep="\n")  # リストの要素を改行を挟んで表示する関数

    # 入力を整数に変換して受け取る
    def input_int():
        return int(input())

    def map_int_input():
        return map(int, input())

    MII = map_int_input

    def MII_split():
        return map(int, input().split())

    def MII_to_index():
        return map(to_index, input())

    def MII_split_to_index():
        return map(to_index, input().split())

    # 入力全てを整数に変換したものの配列を受け取る
    def list_int_inputs():
        return list(map(int, input()))

    LII = list_int_inputs

    def LII_split():
        return list(map(int, input().split()))

    # 2次元リスト化
    def LII_2D(rows_number):
        return [LII() for _ in range(rows_number)]

    def LII_split_2D(rows_number):
        return [LII_split() for _ in range(rows_number)]

    import math
    def L(x, y, z):
        return int(x * x + y * y + z * z + x * y + y * z + z * x)

    N = input_int()
    for n in range(1, N + 1):
        ans = 0
        for x in range(1, 50):
            for y in range(x, 50):
                b = x + y
                c = -n + x * x + y * y + x * y
                D = b * b - 4 * c
                if D < 0:
                    continue
                z = (-b + math.sqrt(D)) / 2
                if z.is_integer() and z >= y:
                    if x == y == z:
                        ans += 1
                        continue
                    else:
                        ans += 3
                        continue
                # # for z in range(y, 50):
                # left = L(x, y, z)
                # if left > n:
                #     break
                # elif left == n:
                #     if x == y == z:
                #         ans += 1
                #         break
                #     else:
                #         ans += 3
                #         break

        print(ans)
resolve()

### FIXED CODE ###

def resolve():
    import sys
    sys.setrecursionlimit(10 ** 6)  # 再帰関数の再帰の深さを設定
    to_index = lambda x: int(x) - 1  # 入力した数字に1を引いたものを返す
    print_list_in_2D = lambda x: print(*x, sep="\n")  # リストの要素を改行を挟んで表示する関数

    # 入力を整数に変換して受け取る
    def input_int():
        return int(input())

    def map_int_input():
        return map(int, input())

    MII = map_int_input

    def MII_split():
        return map(int, input().split())

    def MII_to_index():
        return map(to_index, input())

    def MII_split_to_index():
        return map(to_index, input().split())

    # 入力全てを整数に変換したものの配列を受け取る
    def list_int_inputs():
        return list(map(int, input()))

    LII = list_int_inputs

    def LII_split():
        return list(map(int, input().split()))

    # 2次元リスト化
    def LII_2D(rows_number):
        return [LII() for _ in range(rows_number)]

    def LII_split_2D(rows_number):
        return [LII_split() for _ in range(rows_number)]

    import math
    def L(x, y, z):
        return int(x * x + y * y + z * z + x * y + y * z + z * x)

    N = input_int()
    # for n in range(1, N + 1):  # f(n)を計算する仮定でf(n-1)の候補が現れるので...

    ans = [0 for _ in range(N)]
    for x in range(1, 105):
        for y in range(1, 105):
            for z in range(1, 105):
                f = L(x, y, z)

                if f <= N:
                    ans[f - 1] += 1
                    # if x == y == z:
                    #     ans[f - 1] += 1
                    # else:
                    #     ans[f - 1] += 3

    for a in ans:
        print(a)
resolve()