def merge_adjacent_intervals(intervals):
    """
    >>> merge_adjacent_intervals([(1, 3), (4, 5)])
    [(1, 3), (4, 5)]
    >>> merge_adjacent_intervals([(1, 4), (4, 5)])
    [(1, 5)]
    >>> merge_adjacent_intervals([(1, 2), (2, 5), (5, 7)])
    [(1, 7)]
    >>> merge_adjacent_intervals([(1, 2), (2, 5), (5, 7), (8, 9)])
    [(1, 7), (8, 9)]
    >>> merge_adjacent_intervals([(1, 2), (2, 5), (6, 7), (7, 9), (10, 11), (13, 14)])
    [(1, 5), (6, 9), (10, 11), (13, 14)]
    >>> merge_adjacent_intervals([])
    []
    >>> merge_adjacent_intervals([(0, 1)])
    [(0, 1)]
    >>> merge_adjacent_intervals([(0, 1), (1, 8)])
    [(0, 8)]
    """

    merged_intervals = []

    # Iterate once through list, and merge greedily.
    index = 0
    while index < len(intervals):
        curr_interval = intervals[index]
        curr_start = curr_interval[0]
        curr_end = curr_interval[1]

        # See how far we can go on merging intervals.
        next_index = index + 1
        while next_index < len(intervals):
            next_interval = intervals[next_index]

            if next_interval[0] == curr_end:
                curr_end = next_interval[1]
            else:
                break

            next_index += 1

        merged_intervals.append((curr_start, curr_end))
        index = next_index

    return merged_intervals