s = sorted(list(set(map(int, input().split(',')))))
i = 0
ans = ""
while i < len(s):
ans += f"{s[i]}"
beg = i
while i < len(s) - 1 and s[i] == s[i + 1] - 1:
i += 1
if beg == i:
ans += ","
else:
ans += f"-{s[i]},"
i += 1
ans = ans.strip(',')
print(ans)
#include <iostream>
#include <vector>
std::vector<int> parseString(std::string s){
int x(0);
std::vector<int> nums;
for(long p = 0; p < s.size(); p++){
if(s[p] == ','){nums.push_back(x); x = 0;}
else{x = 10 * x + (s[p] - '0');}
}
nums.push_back(x);
return nums;
}
int main(){
const long N = 1111;
std::ios_base::sync_with_stdio(false);
std::string s; std::cin >> s;
std::vector<int> nums = parseString(s);
std::vector<bool> a(N, 0);
for(long p = 0; p < nums.size(); p++){a[nums[p]] = true;}
long from(-1), initial(1);
for(long p = 0; p < N; p++){
if(!a[p]){
if(from >= 0){
long to = p - 1;
if(!initial){std::cout << ",";}
initial = false;
if(from < to){std::cout << from << "-" << to;}
else{std::cout << from;}
}
from = -1;
}
else if(a[p] && from < 0){from = p;}
}
std::cout << std::endl;
return 0;
}
78B - Easter Eggs | 1455B - Jumps |
1225C - p-binary | 1525D - Armchairs |
1257A - Two Rival Students | 1415A - Prison Break |
1271A - Suits | 259B - Little Elephant and Magic Square |
1389A - LCM Problem | 778A - String Game |
1382A - Common Subsequence | 1512D - Corrupted Array |
667B - Coat of Anticubism | 284B - Cows and Poker Game |
1666D - Deletive Editing | 1433D - Districts Connection |
2B - The least round way | 1324A - Yet Another Tetris Problem |
246B - Increase and Decrease | 22E - Scheme |
1566A - Median Maximization | 1278A - Shuffle Hashing |
1666F - Fancy Stack | 1354A - Alarm Clock |
1543B - Customising the Track | 1337A - Ichihime and Triangle |
1366A - Shovels and Swords | 919A - Supermarket |
630C - Lucky Numbers | 1208B - Uniqueness |