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 JAVA (judge verdict: Wrong Answer)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = null;
		while((input = br.readLine()) != null){
			String[] v = input.split(" ");
			int year = Integer.parseInt(v[0]);
			int month = Integer.parseInt(v[1]) - 1;	// 0 <= month <= 11
			int date = Integer.parseInt(v[2]);
			String era = transToEra(new GregorianCalendar(year, month, date));
			System.out.println(era + ((era.equals("pre-meiji"))? "": " " + month + " " + date));
		}
	}

	public static String transToEra(GregorianCalendar date){
		GregorianCalendar startMeiji = new GregorianCalendar(1868, Calendar.SEPTEMBER, 8);
		GregorianCalendar startTaisho = new GregorianCalendar(1912, Calendar.JULY, 30);
		GregorianCalendar startShowa = new GregorianCalendar(1926, Calendar.DECEMBER, 25);
		GregorianCalendar startHeisei = new GregorianCalendar(1989, Calendar.JANUARY, 8);
		final int yearField = Calendar.YEAR;
		if(date.before(startMeiji)){
			return "pre-meiji";
		}else if(date.before(startTaisho)){
			return "meiji " + (date.get(yearField) - startMeiji.get(yearField) + 1);
		}else if(date.before(startShowa)){
			return "taisho " + (date.get(yearField) - startTaisho.get(yearField) + 1);
		}else if(date.before(startHeisei)){
			return "showa " + (date.get(yearField) - startShowa.get(yearField) + 1); 
		}else{
			return "heisei " + (date.get(yearField) - startHeisei.get(yearField) + 1);
		}
	}
}