import java.util.*;

public class CombineOverlappingRanges {
    public static List<int[]> merge(int[][] intervals) {
        if (intervals.length == 0) {
            return new ArrayList<>();
        }

        Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));

        List<int[]> merged = new ArrayList<>();
        int[] currentInterval_ = intervals[0];

        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i][0] <= currentInterval_[1]) {
                
                currentInterval_[1] = Math.max(currentInterval_[1], intervals[i][1]);
            } else {
                merged.add(currentInterval_);
                currentInterval_ = intervals[i];
            }
        }

        merged.add(currentInterval_);

        return merged;
    }

    public static void main(String[] args) {
        int[][] ranges1 = {{1, 3}, {2, 6}, {8, 10}, {15, 18}};
        int[][] ranges2 = {{1, 4}, {4, 5}};

        System.out.println("Example Merged Ranges 1: " + Arrays.deepToString(merge(ranges1).toArray()));
        System.out.println("Example Merged Ranges 2: " + Arrays.deepToString(merge(ranges2).toArray()));
    }
}