Problem:
４つの整数の和 II

4,000 以下の正の整数 n を入力し、0 〜 1000 の範囲の整数 a, b, c, d の組で

a + b + c + d = n

を満たすものの組み合わせ数を出力するプログラムを作成して下さい。

Input

複数のデータセットが与えられます。各データセットに n が１行に与えられます。入力の最後まで処理して下さい。

データセットの数は 50 を超えません。

Output

各データセットごとに、a, b, c, d の組み合わせの個数を１行に出力して下さい。

Sample Input

2
3
35

Output for the Sample Input

10
20
8436

Solution in Haskell (judge verdict: Time Limit Exceeded)

ans' n t [] = 0
ans' n t (x:xs) =
  let
    a = ans (n-1) (t-x)
  in
    a + (ans' n t xs)

ans 2 t =
  if t > 2000
  then 0
  else if t > 1000
       then 2001 - t
       else t + 1

ans n t =
 if t > n * 1000
 then 0
 else
   let m = min t 1000
   in
--     sum $ map (\x -> ans (n-1) (t-x) ) $ reverse [0..m]
     ans' n t [0..m]
--     ans' n t $ reverse [0..m]
--     ans' n t $ reverse [0..1000]

main = do
  c <- getContents
  let i = map read $ lines c :: [Int]
      o = map (ans 4) i
  mapM_ print o