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;
using System.Linq;

namespace Volume0 {
	class Program {
		public static void Main() {
			bool next = ReadAndShowLeapYears(false);
			while (next) {
				next = ReadAndShowLeapYears(true);
			}
		}

		static bool IsLeapYear(int year) {
			if (year % 400 == 0) return true;
			else if (year % 100 == 0) return false;
			else if (year % 4 == 0) return true;
			else return false;
		}

		static void ShowLeapYears(int start, int end) {
			int[] leaps = Enumerable.Range(start, end - start + 1)
				.Where(IsLeapYear)
				.ToArray();
			if (leaps.Count() == 0) Console.WriteLine("NA");
			else {
				foreach (int y in leaps) Console.WriteLine(y);
			}
		}

		static bool ReadAndShowLeapYears(bool br) {
			int[] input = Console.ReadLine().Split()
				.Select(int.Parse)
				.ToArray();
			if (input[0] == 0 && input[1] == 0) return false;
			else {
				if (br) Console.WriteLine();
				ShowLeapYears(input[0], input[1]);
				return true;
			}
		}
	}
}