#include <algorithm>
#include <cstring>
#include <iostream>
#include <string>
const char default_disallowed[] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
void remove_disallowed(std::string &str, const char *lookup = default_disallowed)
{
str.erase(std::remove_if(str.begin(), str.end(), [&](char c) {
return lookup[static_cast<unsigned char>(c)];
}), str.end());
}
// make disallow table from complement of "good" character string
void make_disallowed(const std::string &str, char *lookup) // lookup[256]
{
memset(lookup, 1, 256);
for (unsigned char c : str) {
lookup[c] = 0;
}
}
int main()
{
char table[256];
make_disallowed("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-", table);
std::string str;
while (std::getline(std::cin, str)) {
//remove_disallowed(str);
remove_disallowed(str, table);
std::cout << str << '\n';
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KCmNvbnN0IGNoYXIgZGVmYXVsdF9kaXNhbGxvd2VkW10gPSB7CgkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAoJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsCgkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLAoJMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDAsCgkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAoJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwKCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCgkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAoJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCgkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAoJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCgkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxCn07Cgp2b2lkIHJlbW92ZV9kaXNhbGxvd2VkKHN0ZDo6c3RyaW5nICZzdHIsIGNvbnN0IGNoYXIgKmxvb2t1cCA9IGRlZmF1bHRfZGlzYWxsb3dlZCkKewoJc3RyLmVyYXNlKHN0ZDo6cmVtb3ZlX2lmKHN0ci5iZWdpbigpLCBzdHIuZW5kKCksIFsmXShjaGFyIGMpIHsKCQlyZXR1cm4gbG9va3VwW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpXTsKCX0pLCBzdHIuZW5kKCkpOwp9CgovLyBtYWtlIGRpc2FsbG93IHRhYmxlIGZyb20gY29tcGxlbWVudCBvZiAiZ29vZCIgY2hhcmFjdGVyIHN0cmluZwp2b2lkIG1ha2VfZGlzYWxsb3dlZChjb25zdCBzdGQ6OnN0cmluZyAmc3RyLCBjaGFyICpsb29rdXApIC8vIGxvb2t1cFsyNTZdCnsKCW1lbXNldChsb29rdXAsIDEsIDI1Nik7Cglmb3IgKHVuc2lnbmVkIGNoYXIgYyA6IHN0cikgewoJCWxvb2t1cFtjXSA9IDA7Cgl9Cn0KCmludCBtYWluKCkKewoJY2hhciB0YWJsZVsyNTZdOwoJbWFrZV9kaXNhbGxvd2VkKCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl8tIiwgdGFibGUpOwoKCXN0ZDo6c3RyaW5nIHN0cjsKCXdoaWxlIChzdGQ6OmdldGxpbmUoc3RkOjpjaW4sIHN0cikpIHsKCQkvL3JlbW92ZV9kaXNhbGxvd2VkKHN0cik7CgkJcmVtb3ZlX2Rpc2FsbG93ZWQoc3RyLCB0YWJsZSk7CgkJc3RkOjpjb3V0IDw8IHN0ciA8PCAnXG4nOwoJfQp9Cg==