#include <iostream>
#include <string>
using namespace std;
string getFirstPart(const string& input)
{
static const char* whitespaces = "\t\n\v\f\r ";
string::size_type begin = input.find_first_not_of(whitespaces);
if(begin == string::npos)
begin = 0;
string result = input.substr(begin, input.find('#') - begin);
string::size_type end = result.find_last_not_of(whitespaces);
if(end != string::npos)
result.erase(end + 1);
return result;
}
int main()
{
cout << '"' << getFirstPart("") << '"' << endl;
cout << '"' << getFirstPart("abc") << '"' << endl;
cout << '"' << getFirstPart(" a b c ") << '"' << endl;
cout << '"' << getFirstPart("#") << '"' << endl;
cout << '"' << getFirstPart(" #abc") << '"' << endl;
cout << '"' << getFirstPart(" fo o #bar") << '"' << endl;
cout << '"' << getFirstPart(" fo o#bar") << '"' << endl;
cout << '"' << getFirstPart("fo o#") << '"' << endl;
cout << '"' << getFirstPart("fo o #bar") << '"' << endl;
cout << '"' << getFirstPart("\rfoo\n#bar#baz") << '"' << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCnN0cmluZyBnZXRGaXJzdFBhcnQoY29uc3Qgc3RyaW5nJiBpbnB1dCkKewoJc3RhdGljIGNvbnN0IGNoYXIqIHdoaXRlc3BhY2VzID0gIlx0XG5cdlxmXHIgIjsKCXN0cmluZzo6c2l6ZV90eXBlIGJlZ2luID0gaW5wdXQuZmluZF9maXJzdF9ub3Rfb2Yod2hpdGVzcGFjZXMpOwoJaWYoYmVnaW4gPT0gc3RyaW5nOjpucG9zKQoJCWJlZ2luID0gMDsKCXN0cmluZyByZXN1bHQgPSBpbnB1dC5zdWJzdHIoYmVnaW4sIGlucHV0LmZpbmQoJyMnKSAtIGJlZ2luKTsKCXN0cmluZzo6c2l6ZV90eXBlIGVuZCA9IHJlc3VsdC5maW5kX2xhc3Rfbm90X29mKHdoaXRlc3BhY2VzKTsKCWlmKGVuZCAhPSBzdHJpbmc6Om5wb3MpCgkJcmVzdWx0LmVyYXNlKGVuZCArIDEpOwoJcmV0dXJuIHJlc3VsdDsKfQoKCmludCBtYWluKCkKewogICAgY291dCA8PCAnIicgPDwgZ2V0Rmlyc3RQYXJ0KCIiKSA8PCAnIicgPDwgZW5kbDsKCWNvdXQgPDwgJyInIDw8IGdldEZpcnN0UGFydCgiYWJjIikgPDwgJyInIDw8IGVuZGw7Cgljb3V0IDw8ICciJyA8PCBnZXRGaXJzdFBhcnQoIiBhIGIgYyAiKSA8PCAnIicgPDwgZW5kbDsKCWNvdXQgPDwgJyInIDw8IGdldEZpcnN0UGFydCgiIyIpIDw8ICciJyA8PCAgZW5kbDsKCWNvdXQgPDwgJyInIDw8IGdldEZpcnN0UGFydCgiICNhYmMiKSA8PCAnIicgPDwgZW5kbDsKCWNvdXQgPDwgJyInIDw8IGdldEZpcnN0UGFydCgiIGZvIG8gI2JhciIpIDw8ICciJyA8PCBlbmRsOwoJY291dCA8PCAnIicgPDwgZ2V0Rmlyc3RQYXJ0KCIgZm8gbyNiYXIiKSA8PCAnIicgPDwgZW5kbDsKCWNvdXQgPDwgJyInIDw8IGdldEZpcnN0UGFydCgiZm8gbyMiKSA8PCAnIicgPDwgZW5kbDsKCWNvdXQgPDwgJyInIDw8IGdldEZpcnN0UGFydCgiZm8gbyAjYmFyIikgPDwgJyInIDw8IGVuZGw7Cgljb3V0IDw8ICciJyA8PCBnZXRGaXJzdFBhcnQoIlxyZm9vXG4jYmFyI2JheiIpIDw8ICciJyA8PCBlbmRsOwp9IA==