Problem:
日数

2 つの日付を入力とし、その 2 つの日付けの間の日数を出力するプログラムを作成してください。

日付 1 (y1, m1, d1) は日付 2 (y2, m2, d2) と同じか、あるいはそれ以前の日付とします。日付 1 は日数に含め、日付 2 は含めません。また、うるう年を考慮にいれて計算してください。うるう年の条件は次のとおりとします。

西暦年が 4 で割り切れる年であること。

ただし、100 で割り切れる年はうるう年としない。

しかし、400 で割り切れる年はうるう年である。

Input

複数のデータセットが与えられます。各データセットの形式は以下のとおりです：

y1 m1 d1 y2 m2 d2

y1, m1, d1, y2, m2, d2 のいずれかが負の数のとき入力の終わりとします。

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

Output

データセットごとに、日数を１行に出力してください。

Sample Input

2006 9 2 2006 9 3
2006 9 2 2006 11 11
2004 1 1 2005 1 1
2000 1 1 2006 1 1
2000 1 1 2101 1 1
-1 -1 -1 -1 -1 -1

Output for the Sample Input

1
70
366
2192
36890

Solution in Haskell (judge verdict: Accepted)

dayCount [y1,m1,d1, y2,m2,d2]
  | y1 < y2 || m1 < m2 = monLen y1 m1 + dayCount (nextMon ++ [y2,m2,d2])
  | otherwise          = d2 - d1
  where nextMon | m1 < 12   = [y1, m1+1, d1]
                | otherwise = [y1+1,  1, d1]

monLen y m
  | m == 2    = 28 + leap y
  | otherwise = [31,28,31,30,31,30,31,31,30,31,30,31] !! (m - 1)

leap y = if isLeapYear y then 1 else 0
isLeapYear y = (y `mod` 4 == 0 && y `mod` 100 /= 0) || y `mod` 400 == 0

main = do
  s <- getLine
  let ls = map read . words $ s
  if or $ map (< 0) ls
    then return ()
    else do putStrLn . show . dayCount $ ls
            main