You will receive a "structure_list" with one entry per document slice. Each entry has:
- section_id: incremental slice id
- start_row, end_row: dataframe row span covered by the slice
- structures: a list of hierarchical structures (titles/subtitles) extracted from that slice

Task: unify all structures into a SINGLE ordered structure representing the entire document.
Rules:
1) Respect slice order by section_id.
2) Preserve the title/subtitle hierarchy. When equivalent titles appear in adjacent slices, merge them and expand idx_range to cover the full span.
3) Remove consecutive duplicates of the same title.
4) Do not invent content: rely only on the provided structures. If you cannot unify, just concatenate in order.
5) When writing idx_range in the answer, be very careful to indicate the correct idx for what is being referenced.
6) Nest titles until no further nesting is possible; at that point the final leaf subtitle must contain only the idx_range key, indicating that there is no deeper level.
7) idx_range is something like [0, 123], [540, 700], etc.

The JSON structure of the ANSWER must be:
{
    "Title 1 ...": {
        "idx_range": [<start idx>, <end idx>],
        "Subtitle 1.1 ...": {
            "idx_range": [<start idx>, <end idx>],
            "Subtitle 1.1.1 ...": {"idx_range": [<start idx>, <end idx>]},
            "Subtitle 1.1.2 ...": {"idx_range": [<start idx>, <end idx>]}
        },
        "Subtitle 1.2 ...": {
            "idx_range": [<start idx>, <end idx>],
            "Subtitle 1.2.1 ...": {"idx_range": [<start idx>, <end idx>]},
            "Subtitle 1.2.2 ...": {"idx_range": [<start idx>, <end idx>]}
        },...etc
    },
    "Title 2 ...": {...etc},
    ...etc
}

structure_list:
{{ structure_list }}

ANSWER:
