import java.util.*;
public class Solution 
{
    public static void main (String[] args)
    {
        //int[] nums = new int[]{0,2,3,4,6,8,9};   //Test case 1    PASS    Junction 2,6,10,11,12,3,5,14,13,4
        //int[] nums = new int[]{-1};   //Test case 2      PASS             Junction 1
        //int[] nums = new int[]{0};   //Test case 3       PASS             Junction 1
         //int[] nums = new int[]{0,1,2,4,5,7};   //Test case 4    PASS        Junction 2,3,5,6,10,14,9,7
        
        //For some reason, no test cases above went through junction 8. All others are valid.
        //So I devised a new test case below and it passes through it...
        //new test case:
        int[] nums = new int[]{0,1,2,4,5,7,8,10,14,17,19};   //Test case 4    FAIL   However it can be seen the output is wrong:
        //[0->2, 4->5, 7->8, 7->10, 14]
        
        System.out.println(summaryRanges(nums));
    }
    
    public static List<String> summaryRanges(int[] nums) 
    {
        List<String> sm = new ArrayList<>();
        int counter = 0;
        String start="";
        String end="";

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

        for (int k=0; k<nums.length-1;k++)
        {
            System.out.println("value k: " + k);
            System.out.println("length nums: " + nums.length);
            System.out.println("value of counter: " + counter);

            if (k==0)
            {
                System.out.println("JUNCTION 2");
                start=String.valueOf(nums[k]);
            }
            //{0,2,3,4,6,8,9}           
            //this time focussing on equality
            System.out.println("£££££££££££££££££££CHECKING: " + nums[k] + " with " + nums[k+1]);
            
            //if the next element is ascending
            if ((nums[k]+1)==(nums[k+1]))
            {
                System.out.println("JUNCTION 3");
                if (counter==0 && (k==nums.length-2))
                {
                    System.out.println("JUNCTION 4");
                    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)
                {
                    System.out.println("JUNCTION 5");
                    start=String.valueOf(nums[k]);
                    System.out.println("Establishing start: " + start);
                }
                counter++; 
            }
            else    ////not consecutive match
            {
                System.out.println("JUNCTION 6");
                if (k==nums.length-2)
                {
                    System.out.println("JUNCTION 7");
                    System.out.println("counter:" + counter + "-------------------------------LAST TO LAST ITEM :" + nums[k]);
                    
                    
                    if (counter==0)
                    {
                        System.out.println("JUNCTION 8");
                        end = String.valueOf(nums[k]);
                        System.out.println("HERE");
                        sm.add(end);
                        //System.out.println("6Writing range: " + start + "-> " + end); 
                        start=String.valueOf(nums[k+1]);
                        sm.add(start);
                    }
                    
                    else
                    {
                        if (counter!=0)
                        {
                        System.out.println("JUNCTION 9");
                        end=String.valueOf(nums[k]);
                        sm.add(start+"->"+end);
                        System.out.println("3Writing range: " + start + "-> " + end); 
                        sm.add(String.valueOf(nums[k+1]));
                        }
                    }
                }
                else
                {
                    System.out.println("JUNCTION 10");
                    System.out.println("****************************" + counter);
                    //endConsecutive=true;
                    end=String.valueOf(nums[k]);

                    if (counter==0)
                    {
                        System.out.println("JUNCTION 11");
                        if(k==0)
                        {
                            System.out.println("JUNCTION 12");
                            System.out.println("1Writing range: " + start);
                            sm.add(start);
                        }
                        else
                        {
                            System.out.println("JUNCTION 13");
                            start = String.valueOf(nums[k]);
                            sm.add(start);
                        }
                    }
                    else
                    {
                        System.out.println("JUNCTION 14");
                        System.out.println("2Writing range: " + start + "-> " + end); 
                        sm.add(start+"->"+end);
                        counter=0;
                    }
                }
            }
        }  //end for 
        return sm;
    }
}