#include <cstdio>
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
char s[1000];
vector<char> small, big, num;
void format(vector<char> a, vector<char> b, vector<char> c) {
for(int i = 0; i < a.size(); ++i) {
printf("%c", a[i]);
}
if( (a.size()!=0) && (a[a.size()-1] != ' ') ) {
printf(" ");
}
for(int i = 0; i < b.size(); ++i) {
printf("%c", b[i]);
}
if( (b.size()!=0) && (b[b.size()-1] != ' ') ) {
printf(" ");
}
for(int i = 0; i < c.size(); ++i) {
printf("%c", c[i]);
}
}
int main() {
freopen("input.txt", "r", stdin);
gets(s);
int s_len = strlen(s);
bool flag = false;
for(int i = 0; i < s_len; ++i) {
if(s[i] >= 'a' && s[i] <= 'z') {
small.push_back(s[i]);
flag = true;
}
else if(flag == true) {
small.push_back(' ');
flag = false;
}
}
flag = false;
for(int i = 0; i < s_len; ++i) {
if(s[i] >= 'A' && s[i] <= 'Z') {
big.push_back(s[i]);
flag = true;
}
else if(flag == true) {
big.push_back(' ');
flag = false;
}
}
flag = false;
for(int i = 0; i < s_len; ++i) {
if(s[i] >= '0' && s[i] <= '9') {
num.push_back(s[i]);
flag = true;
}
else if(flag == true) {
num.push_back(' ');
flag = false;
}
}
format(small, big, num);
return 0;
}