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 Common Lisp (SBCL 2.0.3) (judge verdict: Accepted)

(defun ev (x y z)
  (+ (expt x 2)
     (expt y 2)
     (expt z 2)
     (* x y)
     (* y z)
     (* z x)))

(defun p (x y z)
  (cond ((= x y z) 1)
        ((and (= y z) (/= x y)) 3)
        ((and (= x y) (/= z x)) 3)
        (t 6)))

(defun f (n)
  (let ((c (make-array (list (1+ n)) :initial-element 0)))
    (loop :named x-loop
          :for x :from 1 :to 99
          :do (loop :named y-loop
                    :for y :from x :to (- 123 x)
                    :do (loop :named z-loop
                              :for z :from y :to (- 123 (+ x y))
                              :if (> (ev x y z) n)
                              :do (cond ((= x y z)
                                         (return-from x-loop))
                                        ((= y z)
                                         (return-from y-loop))
                                        (t
                                         (return-from z-loop)))
                              :do (incf (aref c (ev x y z)) (p x y z)))))
    c))

(let* ((n (read))
       (ans (f n)))
  (loop :for x :from 1 :to n
        :do (format t "~A~%" (aref ans x))))