import java.util.*;

public class Solution 
{
    public static void main (String[] args)
    {
        //************ALL DOCUMENTED TEST CASES**********
        //Ascending
        //int[] nums = new int[]{0,2,3,4,6,8,9};   //Test case 1    PASS             
        //int[] nums = new int[]{-1};   //Test case 2             PASS             
        //int[] nums = new int[]{0};   //Test case 3       PASS                    
        //int[] nums = new int[]{0,1,2,4,5,7};   //Test case 4    PASS            
        
        //Descending
        //int[] nums = new int[]{9,8,6,4,3,2,0};    PASS            
        //int[] nums = new int[]{-1};                PASS             
        //int[] nums = new int[]{0};          PASS                    
        //int[] nums = new int[]{7,5,4,2,1,0};      PASS 
        
        //For some reason, no test cases above went through junction 8. All others are valid.
        //So these were new devised cases.....
        //int[] nums = new int[]{0,1,2,4,5,7,8,10,14};   //Test case 4    PASS            
        //int[] nums = new int[]{0,2,4,5,7,8,10,14,17,19,23,24,25,26,35,42,43,44};  PASS     
        //int[] nums = new int[]{5,4,3,4,5,7,6,10,14,17,19,23,24,25,26,35,42,47,60,61};  PASS
        //int[] nums = new int[]{7,6,9,3,5,8};
        
        //Merging both ascending and descending code
        //int[] nums = new int[]{5,4,3,4,5,6,8,8};   PASS
        //int[] nums = new int[]{5,4,3,4,5,7,6,5,10,14,17,19,23,24,25,26,35,34,33,47};  PASS
        
        //int[] nums = new int[]{5,6,7,6,5,9,10,11,44,45,46,47,46,45,44,43,25,24,24,23,23,22};  //using ascending, descending and non-changing....PASS
        
        int[] nums = new int[]{5,9,13,2,3,4,3,1,2,3,4,5,6,22,66,65,65,64,63,90,89,60}; //using standalone numbers in between and also ascending/descending...PASS
        
        //repeat numbers
        //int[] nums = new int[]{2,2,2,4,4,1,1,9,9};  PASS
        
        System.out.println(summaryRanges(nums));
    }
    
    public static List<String> summaryRanges(int[] nums) 
    {
        List<String> sm = new ArrayList<>();
        int counter = 0;
        String start="";
        String end="";
        String temp="";
        String backupStart="";
        boolean hasTransition=false;
        String transitionNumber="";

        if (nums.length==1)
        {
            sm.add(String.valueOf(nums[0]));
            System.out.println("1Writing Standalone: " + nums[0]);
            return sm;
        }

        for (int k=0; k<nums.length-1;k++)
        {
            if (k==0)
            {
                start=String.valueOf(nums[k]);
            }
            
            System.out.println("CHECKING: " + nums[k] + " with " + nums[k+1]);
            
            if ((nums[k]+1)==(nums[k+1]))
            {
                if (counter==0)
                {
                    backupStart=String.valueOf(nums[k]);
                }
                
                if (counter==0 && (k==nums.length-2))
                {
                    start=String.valueOf(nums[k]);
                    end = String.valueOf(nums[k+1]);
                    sm.add(start+"->"+end);
                    System.out.println("5Writing range: " + start + "-> " + end); 
                    break;
                }
                
                if (counter!=0 && (k==nums.length-2))
                {
                    end=String.valueOf(nums[k+1]);
                    sm.add(start +"->"+end);
                    System.out.println("6Writing range: " + start + "-> " + end); 
                }

                if (counter==0)
                {
                    start=String.valueOf(nums[k]);
                    System.out.println("Establishing start: " + start);
                    
                    if (k==nums.length-1)
                    {
                        System.out.println("2Writing Standalone: " + start);
                        sm.add(start);
                    }
                }
                counter++; 
            }
            else
            {
                if (k==nums.length-2)
                {
                    if (temp!="")
                    {
                        sm.add(temp);
                        System.out.println("9Writing range: " + temp);
                    }
                    
                    if (counter==0)
                    {
                        if ((nums[k]-1)==(nums[k+1]))
                        {
                            start=String.valueOf(nums[k]);
                            end = String.valueOf(nums[k+1]);
                            sm.add(start+"->"+end);
                            System.out.println("7Writing range: " + start + "-> " + end);
                        }
                        else
                        {
                            end = String.valueOf(nums[k]);
                            
                            if (temp=="")
                            {
                                System.out.println("3Writing Standalone: " + end);
                                sm.add(end);
                            }
                                start=String.valueOf(nums[k+1]);
                                System.out.println("4Writing Standalone: " + start);
                                sm.add(start);
                        }
                    }
                    else
                    {
                        end=String.valueOf(nums[k]);
                        sm.add(start+"->"+end);
                        System.out.println("3Writing range: " + start + "-> " + end); 
                        sm.add(String.valueOf(nums[k+1]));
                    }
                }
                else
                {
                    if ((nums[k]-1)==(nums[k+1]))
                    {
                        end=String.valueOf(nums[k+1]);
                    }
                    else
                    {
                        end=String.valueOf(nums[k]);
                    }
                    if (counter==0)
                    {
                        if(k==0)
                        {
                            if ((nums[k]-1)==(nums[k+1]))
                            {
                                start=String.valueOf(nums[k]);
                                counter++;
                            }
                            else 
                            {
                                System.out.println("5Writing standalone: " + start);
                                sm.add(start);
                            }
                        }
                        else
                        {
                            if ((nums[k]-1)==(nums[k+1]))
                            {
                                if (temp=="")
                                {
                                    if ((nums[k-1]-1)==(nums[k]))
                                    {
                                        backupStart=String.valueOf(nums[k-1]);
                                    }
                                    else
                                    {
                                        backupStart=String.valueOf(nums[k]);
                                    }
                                    
                                    temp=backupStart+"->"+end;
                                    hasTransition=false;
                                }
                                else
                                {
                                    end=String.valueOf(nums[k+1]);
                                    temp=backupStart+"->"+end;
                                    hasTransition=false;
                                }
                                System.out.println("8Storing range: " + temp);
                            }
                            else
                            {
                                if (temp!="")
                                {
                                    sm.add(temp);
                                    System.out.println("8Writing range: " + temp);
                                    temp="";
                                    backupStart="";
                                }
                                else
                                {
                                    if ((nums[k-1]-1)==(nums[k]))
                                    {
                                        start=String.valueOf(nums[k-1]);
                                        end = String.valueOf(nums[k]);
                                        sm.add(start+"->"+end);
                                        System.out.println("11Writing range: " + start+"->"+end);
                                    }
                                    else
                                    {
                                        start = String.valueOf(nums[k]);
                                        sm.add(start);
                                        System.out.println("6Writing Standalone: " + start);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        if ((nums[k-1]+1)==(nums[k]) &&  (nums[k])==(nums[k+1])+1)
                        {
                            end=String.valueOf(nums[k]);
                            sm.add(backupStart+"->"+end);
                            System.out.println("10Writing range: " + backupStart+"->"+end);
                            hasTransition=true;
                            transitionNumber=String.valueOf(nums[k]);
                        }
                        if (!hasTransition)
                        {
                            if (temp!="")
                            {
                                end=String.valueOf(nums[k+1]);
                                sm.add(start+"->"+end);
                            }
                            else
                            {
                                System.out.println("2Writing range: " + start + "-> " + end); 
                                sm.add(start+"->"+end);
                            }
                        }
                        counter=0;
                        temp="";
                        backupStart="";
                        hasTransition=false;
                    }
                }
            }
        }
        return sm;
    }
}