#!/usr/bin/env python3
import sys

def test():
    assert(dash_to_seq("") == "")
    assert(dash_to_seq("1") == "1")
    assert(dash_to_seq("1,2") == "1,2")
    assert(dash_to_seq("1-2") == "1,2")
    assert(dash_to_seq("1,5-9,11") == "1,5,6,7,8,9,11")

    assert(get_range_pairs("") == [])
    assert(get_range_pairs([1]) == [(1, 1)])
    assert(get_range_pairs([1, 3]) == [(1, 1), (3, 3)])
    assert(get_range_pairs([1, 2]) == [(1, 2)])
    assert(get_range_pairs([1, 5, 6, 7, 8, 9, 11]) == [(1, 1), (5, 9), (11, 11)])

    assert(range_pairs_to_dash_line([]) == "")
    assert(range_pairs_to_dash_line([(1, 1)]) == "1")
    assert(range_pairs_to_dash_line([(1, 2)]) == "1-2")
    assert(range_pairs_to_dash_line([(1, 1),(3,11)]) == "1,3-11")

    assert(seq_to_dash("") == "")
    assert(seq_to_dash("1,3") == "1,3")
    assert(seq_to_dash("1,5,6,7,8,9,11") == "1,5-9,11")

    print("All tests passed")

def main():
    line = sys.argv[-1]

    if '-' in line:
        print(dash_to_seq(line))
    else:
        print(seq_to_dash(line))

def dash_to_seq(range_line):
    ranges = range_line.split(",")

    result = ""

    for item in ranges:
        if(len(result)):
            result += ","

        if '-' in item:
            result += dash_convert(item)
        else:
            result += str(item)

    return result

def dash_convert(dash_line):
    dash = ""
    start, end = dash_line.split('-')
    for num in range(int(start), int(end) + 1):
        if len(dash):
            dash += ","
        dash += str(num)

    return dash

def seq_to_dash(seq_line, dash = ""):
    seq_list = seq_line_to_seq_list(seq_line)

    range_pairs = get_range_pairs(seq_list)

    return range_pairs_to_dash_line(range_pairs)

def get_range_pairs(seq_list):
    result = []

    for num in seq_list:
        begin, end = get_last_range(result)

        if end + 1 == num:
            result[-1] = (begin, num)
        else:
            result.append((num, num))

    return result

def get_last_range(range_list):
    try:
        return range_list[-1]
    except IndexError:
        return (-2, -2)

def range_pairs_to_dash_line(range_list):
    result = ""

    for begin, end in range_list:
        if result:
            result += ","
        if begin == end:
            result += str(begin)
        else:
            result += str(begin) + "-" + str(end)

    return result

def seq_line_to_seq_list(seq_line):
    if seq_line:
        return [int(item) for item in seq_line.split(',')]
    else:
        return []

def usage():
    print("{} [-t] range\n  -t run optional tests".format(sys.argv[0]))

if __name__ == "__main__":
    if len(sys.argv) > 1:
        if sys.argv[1] == "-t":
            test()
        main()
    else:
        usage()