/*
Online Java - IDE, Code Editor, Compiler

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

//as per the documentation, the code has to handle situation differently depending
//on the width of the number...

public class Main
{
    static boolean isPalindrome=false;
    static int number;
    
    public static void main(String[] args) 
    {
        System.out.println("Welcome to Online IDE!! Happy Coding :)");

	    //NO PALINDROME
        //number=54243245;   // odd number of divideBy10Required
        //number=678;   
        //number=63;
        
        //PALINDROME
        //number=56165;   // even number of divideBy10Required
        //number=121;    // even number of divideBy10Required
        //number=888;
        //number=44;    
        //number=9;
        
        //EXPLORING BEYOND 5 DIGITS WIDE
           number = 1346336431;   //NO ISSUES   10 digits  (number less than Java limit 2,147,483,647)
         //number =  542343245;   //ISSUES      9 digits
         //number =   54244245;   //NO ISSUES   8 digits
         //number =    2349432;   //ISSUES      7 digits
         //number =     234432;   //NO ISSUES   6 digits
         //number =      56165;   //NO ISSUES   5 digits
        
        System.out.println("\nThis is initial number: " + number);
        palindrome(number);
        
        System.out.println("------------------------------------------");
        System.out.println(number +  " is a palindrome:   " + isPalindrome);
        System.out.println("------------------------------------------");
    }
    
    public static void palindrome(int number)
    {
        int lastDigit;
        int divideBy10Required=0;
        int temp;
        int backupTemp; 
        boolean evenFlag=false;
        boolean oddFlag=false;
    
        int firstDigit=0;
        int movePosition=0;
        int numberPalindromeChecks=0;
        int m;
        temp=number;
        
        for (m=0; m<20; m++)
        {
            if ((int)(number/10)==0)
            {
                number=temp;
                break;
            }
            else
            {
                divideBy10Required++;
                number=number/10;
            }
        }
        
        if (m==0)
        {
            isPalindrome=true;
        }
        
        if (divideBy10Required%2==0)
        {
            evenFlag=true;
        }
        
        if (divideBy10Required%2!=0)
        {
            oddFlag=true;
        }
        
        for (int i=0; i<divideBy10Required; i++)
        {
            //System.out.println("BACK HERE: " + divideBy10Required);
            //System.out.println("BACK HERE: " + i);
            
            if (evenFlag)
            {
                if (numberPalindromeChecks>=(int)(divideBy10Required/2) && numberPalindromeChecks!=0)
                {
                    System.out.println("Single digit remaining: " + (temp%10));
                    isPalindrome=true;
                    break;
                }
            }
            lastDigit=temp%10;
            
            if ((lastDigit%10)==0)
            {
                lastDigit=number;
            }
            
            System.out.println("Current number: " + temp);
            //System.out.println("Number divsion by 10: " + divideBy10Required);
            backupTemp=temp;
            boolean hasAdjust = false;
            
            if (evenFlag)
            {
                if (movePosition>=8)
                {
                    movePosition = divideBy10Required-2;
                    hasAdjust=true;
                }
                
                if (movePosition>=6 &&!hasAdjust)
                {
                    movePosition = (divideBy10Required/2)+1;
                    hasAdjust=true;
                }
                
                if(movePosition<6 && !hasAdjust)
                {
                    movePosition = (divideBy10Required/2);
                }
            }
            else
            {
                movePosition = movePosition - 2;
            }
            
            if (i==0)
            {
                movePosition = divideBy10Required;
            }
            
            divideBy10Required=movePosition;
            
            //System.out.println("***********");
            //System.out.println("even flag: " + evenFlag);
            //System.out.println("odd flag:" + oddFlag);
            System.out.println("Number moves required:" + movePosition);
            //System.out.println("***********");
            
            for (int k=0; k<movePosition; k++)
            {
                if (k==0)
                {
                    System.out.println("NUMBER DIVISION BY 10 REQUIRED TO EXPOSE FIRST DIGIT: " +  (movePosition));
                }
                
                temp= (int) (temp/10);
                System.out.println("NEW NUMBER (TO EXPOSE FIRST DIGIT ON RIGHT HANDSIDE): " + temp);
            }
            firstDigit=temp;
            
            if (i>0)
            {
                if (temp%10!=0)
                {
                    firstDigit= temp%10;
                }
            }
            System.out.println("This is first digit: " + firstDigit);
            System.out.println("This is last digit: " + lastDigit);
            
            if (firstDigit%10==0)
            {
                System.out.println("Should not reach here");
                firstDigit=temp;
            }
            
            if (firstDigit==lastDigit)
            {
                System.out.println("PALINDROME: " + firstDigit + "  " + lastDigit);
                isPalindrome=true;
            }
            else
            {
                isPalindrome=false;
                System.out.println("NOT PALINDROME");
                break;
            }
            
            temp=backupTemp;
            temp = (int)(temp/10);
            
            System.out.println("----------------------");
            System.out.println("New number going forward: " + temp);
            //System.out.println("i: " + i);
            //System.out.println("movePosition: " + movePosition);
            
            if (movePosition==3)
            {
                if (movePosition==i)
                {
                    System.out.println("Reduced i counter by 1---");
                    i--;
                    i--;
                }
                else
                {
                    System.out.println("Reduced i counter by 1");
                    i--;
                }
            }
            
            //System.out.println("divideBy10Required: " + divideBy10Required);
            //System.out.println("This is i: " + i);
            
            numberPalindromeChecks++;
        }
    }
}