package main

import (
    "fmt"
    "math"
    "os"
    "strconv"
    "strings"
)

var separators = []string{"-", ":", ".."}

func main() {
    for i := range os.Args {
        fmt.Print(ParseRange(os.Args[i]), "\r\n")
    }
}

func ParseRange(input string) []int {
    var elements = strings.Split(input, ",")
    var ret []int
    var last = 0

    for _, v := range elements {
        elems := ProcessElement(v, last)
        last = elems[len(elems)-1]
        ret = append(ret, elems...)
    }

    return ret
}

func ProcessElement(elem string, last int) []int {
    var ret []int
    if sep := GetSeparator(elem); sep != "" {
        ret = ExplodeRanges(strings.Split(elem, sep), last)
    } else {
        ret = []int{BiasString(last, elem)}
    }
    return ret
}

func ExplodeRanges(nums []string, last int) []int {
    var ret []int

    for i := 0; i < len(nums)-1; i++ {
        lower := BiasString(last, nums[i])
        upper := BiasString(lower, nums[i+1])
        arr := MakeRange(lower, upper)
        if i+1 < len(nums)-1 {
            arr = arr[:len(arr)-1]
        }
        ret = append(ret, arr...)
    }
    return ret
}

func MakeRange(lower int, upper int) []int {
    var ret = make([]int, upper-lower+1)
    for i := range ret {
        ret[i] = lower + i
    }
    return ret
}

func Digits(n int) int {
    return len(strconv.FormatInt(int64(n), 10))
}

func Bias(f int, s int) int {
    mod := int(math.Pow(10, float64(Digits(s))))
    f -= s
    for f%mod != 0 {
        f++
    }
    return f + s
}

func BiasString(f int, s string) int {
    var add, sub = 0, 0
    if strings.HasPrefix(s, "0") {
        add = int(math.Pow(10, float64(len(s))))
        sub = add / 10
    }
    b, _ := strconv.Atoi(s)
    return add + Bias(f, b+sub) - sub
}

func GetSeparator(input string) string {
    for i := 0; i < 3; i++ {
        if strings.Contains(input, separators[i]) {
            return separators[i]
        }
    }
    return ""
}