/*
/*
Online Java - IDE, Code Editor, Compiler
Online Java is a quick and easy tool that helps you to build, compile, test your programs
online.
*/

public class Main
{
    static int year;
    static String yearString;
    static String finalDate;
    static String finalDatePalindrome;
    static Object days;
    static Object month;
    static Object objectLeapYearFebruaryDays;
    static int intLeapYearFebruaryDays;
    static boolean leapYear;
    static String temp;
    static Object prefixZero = "0";
    static int daysMonth;
    static int monthcount;
    static String formattedMonth;
    static int ddInt;
    static int mmInt;
    static String ddString;
    static String mmString;
    static boolean processedFirstMonth=false;

    public static void checkPalindrome(String finalDate, String finalDatePalindrome)
    {
        String reverseString;
        int j=0;
        StringBuffer sb = new StringBuffer();
        
        for (int i=finalDatePalindrome.length()-1; i>=0; i--)
        {
            sb.append(finalDatePalindrome.charAt(i));
            j++;
        }
        reverseString=sb.toString();
        
        if(finalDatePalindrome.equalsIgnoreCase(reverseString))
        {
            System.out.println("Palindrome");
            System.out.println(finalDate);
        }
    }
    
    enum Months
    {
        JAN (31,1),
        FEB(28,2),
        MAR(31,3),
        APR(30,4),
        MAY(31,5),
        JUN(30,6),
        JUL(31,7),
        AUG(31,8),
        SEPT(30,9),
        OCT(31,10),
        NOV(30,11),
        DEC(31,12);

        public int days;
        public int month;
        
        Months (int days, int month)
        {
            this.days=days;
            this.month=month;
        }
    }
    
    public static void main(String[] args) 
    {
        System.out.println("Welcome to Online IDE!! Happy Coding :)");
        palindromicDates("01/01/2020", 100);
    }
    
    public static void palindromicDates (String date, int years)
    {
        int startPos = date.length()-4;
        createDate(startPos, date, years);
    }
    
    public static void createDate(int startPos, String date, int years)
    {
        yearString = date.substring(startPos, date.length());
        year = Integer.valueOf(yearString);
        ddString = date.substring(0,2);
        ddInt = Integer.valueOf(ddString);
        mmString = date.substring(3,5);
        mmInt = Integer.valueOf(mmString)-1;
        boolean newYearRollOver=false;
        
        for (int i=0; i<=years; i++)
        {
            System.out.println(year);
            newYearRollOver=false;
            leapYear=false;
            monthcount=0;
            
            do
            {
                for (Months m: Months.values())
                {
                    switch (mmInt)
                    {
                        case 0:
                        formattedMonth = "01";
                        break;
                        
                        case 1:
                        formattedMonth = "02";
                        break;
                        
                        case 2:
                        formattedMonth = "03";
                        break;
                        
                        case 3:
                        formattedMonth = "04";
                        break;
                        
                        case 4:
                        formattedMonth = "05";
                        break;
                        
                        case 5:
                        formattedMonth = "06";
                        break;
                        
                        case 6:
                        formattedMonth = "07";
                        break;
                        
                        case 7:
                        formattedMonth = "08";
                        break;
                        
                        case 8:
                        formattedMonth = "09";
                        break;
                        
                        case 9:
                        formattedMonth = "10";
                        break;
                        
                        case 10:
                        formattedMonth = "11";
                        break;
                        
                        case 11:
                        formattedMonth = "12";
                        break;
                    }
                    
                    if (year%4==0)
                    {
                        objectLeapYearFebruaryDays = m.FEB.days;
                        intLeapYearFebruaryDays = (int) (objectLeapYearFebruaryDays)+1;
                        leapYear=true;
                    }
                    
                    days = m.days;
                    
                    if (m.name()=="FEB" && leapYear)
                    {
                        days = (Object) intLeapYearFebruaryDays;
                    }
                    daysMonth = (int) days;

                    if (processedFirstMonth)
                    {
                        ddInt=1;
                    }
                    
                    for (int k=ddInt; k<=(int) daysMonth; k++)
                    {
                        month = m.month;
                        temp="";
                        temp = Integer.toString(k);
                        
                        if (k<10)
                        {
                           temp = prefixZero.toString() + Integer.toString(k);
                        }
                        
                        finalDate = temp + "/" + formattedMonth + "/" + year;
                        finalDatePalindrome = temp + formattedMonth + year;
                    
                        checkPalindrome(finalDate, finalDatePalindrome);
                        
                        if (k==daysMonth && formattedMonth=="12")
                        {
                            year++;
                            mmInt=0;
                            newYearRollOver=true;
                        }
                    }
                    
                    processedFirstMonth=true;
                    
                    if (!newYearRollOver)
                    {
                        mmInt=mmInt+1;
                    }
                }
                
                monthcount++;
            }while(monthcount<=12);
        }
    }
}