def parse_sam_region(string):
    """Parse 1-based genomic region string into 0-based tuple."""
    if not string:
        return ()
    parts = string.strip().split(":")
    if len(parts) == 1:
        chrom = parts[0]
        return (chrom,)
    else:
        chrom = parts[0]
        positions = parts[1].split("-")
        positions = [int(s) for s in positions]
        positions[0] = positions[0] - 1  # offset
        return (chrom,) + tuple(positions)