#include <iostream>
#include <string.h>
#define MAX 100
using namespace std;
int myStrlen(char s[], int k){
k = 0;
while (s[k] != '\0')
k++;
return k; //s[k] là \0
}
void ChuanHoa(char s[]){
int len;
while (s[0]==' '){
len = myStrlen(s, len);
for (int i=0; i<len; i++)
s[i]=s[i+1];
}
len = myStrlen(s, len);
while (s[len - 1] == ' '){
s[len - 1] = '\0';
len--;
}
int vitri = 0;
bool thaotac;
while (s[vitri] != '\0'){
thaotac = false;
if (s[vitri] == ' '){
if ((s[vitri + 1] == ' ') || (s[vitri + 1] == '.')){
len = myStrlen(s, len);
for (int i=vitri; i<len; i++)
s[i]=s[i+1];
thaotac = true;
}
}
else if (s[vitri] == '.'){
if (s[vitri + 1] != ' '){
len = myStrlen(s, len);
for (int i=len; i>vitri; i--)
s[i+1] = s[i];
s[vitri+1] = ' ';
thaotac = true;
}
}
if (thaotac == false)
vitri++;
}
}
int main() {
char s[MAX];
cin.getline(s, MAX);
ChuanHoa(s);
cout<<s;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNkZWZpbmUgTUFYIDEwMAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmludCBteVN0cmxlbihjaGFyIHNbXSwgaW50IGspewogICAgayA9IDA7CiAgICB3aGlsZSAoc1trXSAhPSAnXDAnKQogICAgICAgIGsrKzsKICAgIHJldHVybiBrOyAgICAvL3Nba10gbMOgIFwwCn0Kdm9pZCBDaHVhbkhvYShjaGFyIHNbXSl7CiAgICBpbnQgbGVuOwogCiAgICB3aGlsZSAoc1swXT09JyAnKXsKICAgICAgICBsZW4gPSBteVN0cmxlbihzLCBsZW4pOwogICAgICAgIGZvciAoaW50IGk9MDsgaTxsZW47IGkrKykKICAgICAgICAgICAgc1tpXT1zW2krMV07CiAgICB9CiAKICAgIGxlbiA9IG15U3RybGVuKHMsIGxlbik7CiAgICB3aGlsZSAoc1tsZW4gLSAxXSA9PSAnICcpewogICAgICAgIHNbbGVuIC0gMV0gPSAnXDAnOwogICAgICAgIGxlbi0tOwogICAgfQogCiAgICBpbnQgdml0cmkgPSAwOwogICAgYm9vbCB0aGFvdGFjOwogCiAgICB3aGlsZSAoc1t2aXRyaV0gIT0gJ1wwJyl7CiAgICAgICAgdGhhb3RhYyA9IGZhbHNlOwogICAgICAgIGlmIChzW3ZpdHJpXSA9PSAnICcpewogCgogICAgICAgICAgICBpZiAoKHNbdml0cmkgKyAxXSA9PSAnICcpIHx8IChzW3ZpdHJpICsgMV0gPT0gJy4nKSl7CiAKCiAgICAgICAgICAgICAgICBsZW4gPSBteVN0cmxlbihzLCBsZW4pOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaT12aXRyaTsgaTxsZW47IGkrKykKICAgICAgICAgICAgICAgICAgICBzW2ldPXNbaSsxXTsKICAgICAgICAgICAgICAgIHRoYW90YWMgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHNbdml0cmldID09ICcuJyl7CiAgICAgICAgICAgIGlmIChzW3ZpdHJpICsgMV0gIT0gJyAnKXsKICAgICAgICAgICAgICAgIGxlbiA9IG15U3RybGVuKHMsIGxlbik7CiAgICAgICAgICAgICAgICBmb3IgKGludCBpPWxlbjsgaT52aXRyaTsgaS0tKQogICAgICAgICAgICAgICAgICAgIHNbaSsxXSA9IHNbaV07CiAKICAgICAgICAgICAgICAgIHNbdml0cmkrMV0gPSAnICc7CiAKICAgICAgICAgICAgICAgIHRoYW90YWMgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogCiAgICAgICAgaWYgKHRoYW90YWMgPT0gZmFsc2UpCiAgICAgICAgICAgIHZpdHJpKys7CiAgICB9Cn0KIAppbnQgbWFpbigpIHsKCWNoYXIgc1tNQVhdOwoJY2luLmdldGxpbmUocywgTUFYKTsKCUNodWFuSG9hKHMpOwoJY291dDw8czsKCXJldHVybiAwOwp9