(use '[clojure.string :only [split split-lines join]])
(defn unshorten [x y]
(let [iy (Integer. y)
ix (Integer. x)
l-delta (- (count (str x)) (count (str y)))]
(if (< iy ix)
(loop [ty (+ iy (reduce * (repeat l-delta 10)))
tx ix]
(if (and (> ty tx) (.endsWith (str ty) y))
ty
(recur (inc ty) tx)))
iy)))
(defn range-part [acc s]
(let [[t-start t-end t-step] (split s #"-|:|\.{2}")
n (last acc)
start (if (nil? n) (Integer. t-start) (unshorten n t-start))
end (inc (if (nil? t-end) start (unshorten start t-end)))
step (if (nil? t-step) 1 (Integer. t-step))]
(into acc (range start end step))))
(defn parse-range [s]
(println (join " " (reduce range-part [] (split s #",")))))
(seq (map parse-range (split-lines (slurp *in*))))
KHVzZSAnW2Nsb2p1cmUuc3RyaW5nIDpvbmx5IFtzcGxpdCBzcGxpdC1saW5lcyBqb2luXV0pCgooZGVmbiB1bnNob3J0ZW4gW3ggeV0KICAobGV0IFtpeSAoSW50ZWdlci4geSkKICAgICAgICBpeCAoSW50ZWdlci4geCkKICAgICAgICBsLWRlbHRhICgtIChjb3VudCAoc3RyIHgpKSAoY291bnQgKHN0ciB5KSkpXQogICAgKGlmICg8IGl5IGl4KQogICAgICAobG9vcCBbdHkgKCsgaXkgKHJlZHVjZSAqIChyZXBlYXQgbC1kZWx0YSAxMCkpKQogICAgICAgICAgICAgdHggaXhdCiAgICAgICAgKGlmIChhbmQgKD4gdHkgdHgpICguZW5kc1dpdGggKHN0ciB0eSkgeSkpCiAgICAgICAgICB0eQogICAgICAgICAgKHJlY3VyIChpbmMgdHkpIHR4KSkpCiAgICAgIGl5KSkpCgooZGVmbiByYW5nZS1wYXJ0IFthY2Mgc10KICAobGV0IFtbdC1zdGFydCB0LWVuZCB0LXN0ZXBdIChzcGxpdCBzICMiLXw6fFwuezJ9IikKICAgICAgICBuIChsYXN0IGFjYykKICAgICAgICBzdGFydCAoaWYgKG5pbD8gbikgKEludGVnZXIuIHQtc3RhcnQpICh1bnNob3J0ZW4gbiB0LXN0YXJ0KSkKICAgICAgICBlbmQgKGluYyAoaWYgKG5pbD8gdC1lbmQpIHN0YXJ0ICh1bnNob3J0ZW4gc3RhcnQgdC1lbmQpKSkKICAgICAgICBzdGVwIChpZiAobmlsPyB0LXN0ZXApIDEgKEludGVnZXIuIHQtc3RlcCkpXQogICAgKGludG8gYWNjIChyYW5nZSBzdGFydCBlbmQgc3RlcCkpKSkKCihkZWZuIHBhcnNlLXJhbmdlIFtzXQogIChwcmludGxuIChqb2luICIgIiAocmVkdWNlIHJhbmdlLXBhcnQgW10gKHNwbGl0IHMgIyIsIikpKSkpCgooc2VxIChtYXAgcGFyc2UtcmFuZ2UgKHNwbGl0LWxpbmVzIChzbHVycCAqaW4qKSkpKQ==
MSwzLDcsMiw0LDEKMS0zLDEtMgoxOjU6MgoxMDQtMgoxMDQuLjAyCjU0NSw2NDoxMQ==
1,3,7,2,4,1
1-3,1-2
1:5:2
104-2
104..02
545,64:11