Problem:
西暦和暦変換

西暦で表された年月日を、元号を用いた和暦に変換し、その年月日を出力するプログラムを作成してください。入力は例に示すように 3 つの整数であり、順に西暦年、月、日です。これを、出力例に示すように変換してください。なお、明治以前の年月日が入力された場合は「pre-meiji」と表示してください。

各年号の最初の年は「元年」ではなく「１年」と出力することとします。

元号

期間

meiji

1868. 9. 8 〜 1912. 7.29

taisho

1912. 7.30 〜 1926.12.24

showa

1926.12.25 〜 1989. 1. 7

heisei

1989. 1. 8 〜

入力

複数のデータが与えられます。各データとして年、月、日を表す３つの整数が空白区切りで１行に与えられます。

入力の終わりまで処理してください。データの数は 50 を超えません。

出力

空白区切りの元号、年、月、日、または「pre-meiji」を１行に出力してください。

Sample Input

2005 9 3
1868 12 2
1868 9 7

Output for the Sample Input

heisei 17 9 3
meiji 1 12 2
pre-meiji

Solution in C# (judge verdict: Accepted)

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

namespace AOJ
{
	class Program
	{
		static void Main(string[] args)
		{
			var s = "";
			while ((s = Console.ReadLine()) != null)
			{
				var ymd = s.Split(' ').Select(i => int.Parse(i)).ToArray();
				var ymdi = int.Parse(string.Join("", ymd.Select((w, i) => w.ToString().PadLeft(i == 0 ? 4 : 2, '0')).ToArray()));
				if (ymdi < 18680908)
				{
					Console.WriteLine("pre-meiji");
				}
				else if (18680908 <= ymdi && ymdi <= 19120729)
				{
					Console.WriteLine("meiji {0} {1} {2}", (ymd[0] - 1867), ymd[1], ymd[2]);
				}
				else if (19120730 <= ymdi && ymdi <= 19261224)
				{
					Console.WriteLine("taisho {0} {1} {2}", (ymd[0] - 1911), ymd[1], ymd[2]);
				}
				else if (19261225 <= ymdi && ymdi <= 19890107)
				{
					Console.WriteLine("showa {0} {1} {2}", (ymd[0] - 1925), ymd[1], ymd[2]);
				}
				else if (19890108 <= ymdi)
				{
					Console.WriteLine("heisei {0} {1} {2}", (ymd[0] - 1988), ymd[1], ymd[2]);
				}
			}
		}
	}
}