Problem:
うるう年

西暦 a 年から b 年までの間にあるすべてのうるう年を出力するプログラムを作成してください。

うるう年の条件は、次のとおりとします。ただし、0 < a ≤ b < 3,000 とします。与えられた期間にうるう年がない場合には "NA"と出力してください。

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

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

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

Input

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

a b

a, b がともに 0 のとき入力の終了とします。データセットの数は 50 を超えません。

Output

データセットごとに、西暦または NA を出力してください。

データセットの間に１つの空行を入れてください。

Sample Input

2001 2010
2005 2005
2001 2010
0 0

Output for the Sample Input

2004
2008

NA

2004
2008

Solution in C# (judge verdict: Accepted)

using System.Collections.Generic;
using System.Linq;
using System;

public class hello
{
    public static void Main()
    {
        var list1 = new List<int>();
        var list2 = new List<int>();
        var list3 = new List<int>();
        var firstflag = 0;
        while (true)
        {
            string[] line = Console.ReadLine().Trim().Split(' ');
            list1.RemoveAll(x => x >= 0);
            list2.RemoveAll(x => x >= 0);
            list3.RemoveAll(x => x >= 0);
            var y1 = int.Parse(line[0]);
            var y2 = int.Parse(line[1]);
            if (y1 == 0 && y2 == 0) break;
            for (int i = y1; i <= y2; i++)
                if (i % 4 == 0) list1.Add(i);
            foreach (var x in list1)
                if (x % 100 == 0) list2.Add(x);
                else list3.Add(x);
            foreach (var x in list2)
                if (x % 400 == 0) list3.Add(x);
            list3.Sort();
                if (firstflag != 0) Console.WriteLine();
                else firstflag = 1;
            if (list3.Count() == 0)
                Console.WriteLine("NA");
            else
            {
                foreach (var x in list3)
                    Console.WriteLine(x);
            }
        }

    }
}