#include <iostream>
#include <cstring>
using namespace std;
const int MAX_SIZE = 1000;
bool isLetter(char c) {
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
bool isBigLetter(char c) {
return c >= 'A' && c <= 'Z';
}
bool isSmallLetter(char c) {
return c >= 'a' && c <= 'z';
}
bool checkCaps(char text[]) {
char word[100] = {0};
strcpy(word, text);
int n = strlen(word);
for (int i = 0; i < n; ++i) {
if (isBigLetter(word[i])) {
word[i] = word[i] + ('a' - 'A');
}
}
return (strcmp(word, "caps") == 0);
}
void processWords(char text[], bool &capsLock) {
int n = strlen(text), lettersCount = 0;
bool isWord = false;
for (int i = 0; i <= n; ++i) {
if (isLetter(text[i])) {
if (capsLock) {
if (isSmallLetter(text[i])) {
text[i] = text[i] - ('a' - 'A');
}
} else {
if (isBigLetter(text[i])) {
text[i] = text[i] + ('a' - 'A');
}
}
isWord = true;
++lettersCount;
} else if (isWord) {
char temp = text[i];
text[i] = 0;
if (checkCaps(text + i - lettersCount)) {
text[i] = temp;
text[i - lettersCount] = ' ';
for (int j = i - lettersCount + 1; j + 3 <= n; ++j) {
text[j] = text[j + 3];
}
i -= 3;
if (capsLock) {
capsLock = false;
} else {
capsLock = true;
}
} else {
text[i] = temp;
}
isWord = false;
lettersCount = 0;
}
}
}
/*
textul mic ACUM ESTE
MAREEE , nu-i asa?
*/
int main() {
char text[MAX_SIZE + 1] = {0};
bool capsLock = false;
while (cin.getline(text, MAX_SIZE + 1)) {
processWords(text, capsLock);
cout << text << "\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBNQVhfU0laRSA9IDEwMDA7Cgpib29sIGlzTGV0dGVyKGNoYXIgYykgewoJcmV0dXJuIChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKTsKfQoKYm9vbCBpc0JpZ0xldHRlcihjaGFyIGMpIHsKCXJldHVybiBjID49ICdBJyAmJiBjIDw9ICdaJzsKfQoKYm9vbCBpc1NtYWxsTGV0dGVyKGNoYXIgYykgewoJcmV0dXJuIGMgPj0gJ2EnICYmIGMgPD0gJ3onOwp9Cgpib29sIGNoZWNrQ2FwcyhjaGFyIHRleHRbXSkgewoJY2hhciB3b3JkWzEwMF0gPSB7MH07CglzdHJjcHkod29yZCwgdGV4dCk7CglpbnQgbiA9IHN0cmxlbih3b3JkKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CgkJaWYgKGlzQmlnTGV0dGVyKHdvcmRbaV0pKSB7CgkJCXdvcmRbaV0gPSB3b3JkW2ldICsgKCdhJyAtICdBJyk7CgkJfQoJfQoJcmV0dXJuIChzdHJjbXAod29yZCwgImNhcHMiKSA9PSAwKTsKfQoKdm9pZCBwcm9jZXNzV29yZHMoY2hhciB0ZXh0W10sIGJvb2wgJmNhcHNMb2NrKSB7CglpbnQgbiA9IHN0cmxlbih0ZXh0KSwgbGV0dGVyc0NvdW50ID0gMDsKCWJvb2wgaXNXb3JkID0gZmFsc2U7Cglmb3IgKGludCBpID0gMDsgaSA8PSBuOyArK2kpIHsKCQlpZiAoaXNMZXR0ZXIodGV4dFtpXSkpIHsKCQkJaWYgKGNhcHNMb2NrKSB7CgkJCQlpZiAoaXNTbWFsbExldHRlcih0ZXh0W2ldKSkgewoJCQkJCXRleHRbaV0gPSB0ZXh0W2ldIC0gKCdhJyAtICdBJyk7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQlpZiAoaXNCaWdMZXR0ZXIodGV4dFtpXSkpIHsKCQkJCQl0ZXh0W2ldID0gdGV4dFtpXSArICgnYScgLSAnQScpOwoJCQkJfQoJCQl9CgkJCWlzV29yZCA9IHRydWU7CgkJCSsrbGV0dGVyc0NvdW50OwoJCX0gZWxzZSBpZiAoaXNXb3JkKSB7CgkJCWNoYXIgdGVtcCA9IHRleHRbaV07CgkJCXRleHRbaV0gPSAwOwoJCQlpZiAoY2hlY2tDYXBzKHRleHQgKyBpIC0gbGV0dGVyc0NvdW50KSkgewoJCQkJdGV4dFtpXSA9IHRlbXA7CgkJCQl0ZXh0W2kgLSBsZXR0ZXJzQ291bnRdID0gJyAnOwoJCQkJZm9yIChpbnQgaiA9IGkgLSBsZXR0ZXJzQ291bnQgKyAxOyBqICsgMyA8PSBuOyArK2opIHsKCQkJCQl0ZXh0W2pdID0gdGV4dFtqICsgM107CgkJCQl9CgkJCQlpIC09IDM7CgkJCQlpZiAoY2Fwc0xvY2spIHsKCQkJCQljYXBzTG9jayA9IGZhbHNlOwoJCQkJfSBlbHNlIHsKCQkJCQljYXBzTG9jayA9IHRydWU7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQl0ZXh0W2ldID0gdGVtcDsKCQkJfQoJCQlpc1dvcmQgPSBmYWxzZTsKCQkJbGV0dGVyc0NvdW50ID0gMDsKCQl9Cgl9Cn0KLyoKdGV4dHVsIG1pYyAgQUNVTSBFU1RFCk1BUkVFRSAgLCBudS1pIGFzYT8KKi8KaW50IG1haW4oKSB7CgljaGFyIHRleHRbTUFYX1NJWkUgKyAxXSA9IHswfTsKCWJvb2wgY2Fwc0xvY2sgPSBmYWxzZTsKCXdoaWxlIChjaW4uZ2V0bGluZSh0ZXh0LCBNQVhfU0laRSArIDEpKSB7CgkJcHJvY2Vzc1dvcmRzKHRleHQsIGNhcHNMb2NrKTsKCQljb3V0IDw8IHRleHQgPDwgIlxuIjsKCX0KCXJldHVybiAwOwp9