def merge_intervals(intervals):
if not intervals:
return []
ordered = sorted(intervals, key=lambda iv: (iv[0], iv[1]))
merged = [[ordered[0][0], ordered[0][1]]]
for start, end in ordered[1:]:
last = merged[-1]
if start <= last[1]:
if end > last[1]:
last[1] = end
else:
merged.append([start, end])
return merged