import sys def merge(f, m, n, k): i = m j = k + 1 x = 0 fn = [" "] * (n - m + 1) while (i <= k) and (j <= n): if not (("a" <= f[i] <= "z") or ("A" <= f[i] <= "Z")): fn[i - m] = f[i] i += 1 continue if not (("a" <= f[j] <= "z") or ("A" <= f[j] <= "Z")): fn[j - m] = f[j] j += 1 continue while not (("a" <= f[x + m] <= "z") or ("A" <= f[x + m] <= "Z")): fn[x] = f[x + m] x += 1 if f[i].lower() <= f[j].lower(): fn[x] = f[i] i += 1 else: fn[x] = f[j] j += 1 x += 1 while i <= k: if not (("a" <= f[i] <= "z") or ("A" <= f[i] <= "Z")): fn[i-m] = f[i] i += 1 continue while not (("a" <= f[m + x] <= "z") or ("A" <= f[m + x] <= "Z")): fn[x] = f[m + x] x += 1 fn[x] = f[i] i += 1 x += 1 while j <= n: if not (("a" <= f[j] <= "z") or ("A" <= f[j] <= "Z")): fn[j-m] = f[j] j += 1 continue while not (("a" <= f[m + x] <= "z") or ("A" <= f[m + x] <= "Z")): fn[x] = f[m + x] x += 1 fn[x] = f[j] j += 1 x += 1 for i in range(m, n + 1): f[i] = fn[i - m] def sortfun(f, m, n): if m >= n: return k = int((m + n) / 2) sortfun(f, m, k) sortfun(f, k + 1, n) merge(f, m, n, k) for line in sys.stdin: line = line[:-1] line = list(line) sortfun(line, 0, len(line) - 1) print("".join(line))