import std.stdio;
import std.ctype;
import demangler;
//import std.demangle;

import file = std.file;

int main(char[][] args)
{
    char[] buffer;
    bool inword;
    int c;
    
    int delegate() getchar = { return fgetc(stdin); };
    
    char[] input;
    if (args.length > 1) {
        foreach (arg; args[1..$]) {
            if (file.exists(arg))
                input ~= cast(char[])file.read(arg);
            else
                input ~= arg;
            input ~= '\n';
        }
        getchar = {
            if (input.length == 0) {
                return EOF;
            }
            int ret = input[0];
            input = input[1..$];
            return ret;
        };
    }
    
    while ((c = getchar()) != EOF)
    {
        if (inword)
        {
            if (c == '_' || isalnum(c))
                buffer ~= cast(char) c;
            else
            {
                inword = false;
                writef("%s", demangle(buffer), cast(char) c);
            }
        }
        else
        {
            if (c == '_' || isalpha(c))
            {
                inword = true;
                buffer.length = 0;
                buffer ~= cast(char) c;
            }
            else
                writef(cast(char) c);
        }
    }
    if (inword)
        writef("%s", demangle(buffer));
    return 0;
}

