#include <iostream>
using namespace std;
// Ref: http://w...content-available-to-author-only...s.com/reference/iterator/istreambuf_iterator/
// Ref: http://w...content-available-to-author-only...s.com/reference/istream/istream/sentry/
// Ref: http://w...content-available-to-author-only...s.com/reference/istream/istream/
char *buffer_realloc(char *buf, size_t oldSize, size_t newSize)
{
if (oldSize == newSize)
{
return buf;
}
char *newBuf = nullptr;
size_t count = 0;
if (oldSize > newSize)
count = newSize;
else
count = oldSize;
newBuf = new char[newSize];
std::copy(buf, buf + count, newBuf);
delete[] buf;
return newBuf;
}
istream& getline(istream& is, char *&buffer)
{
std::istream::sentry s(is);
if (s)
{
std::istreambuf_iterator<char> it(is);
std::istreambuf_iterator<char> end;
size_t size = 4;
size_t grow = 4;
size_t len = 0;
buffer = new char[size];
while (it != end && *it != '\n')
{
if (len == (size - 1))
{
buffer = buffer_realloc(buffer, size, size + grow);
size += grow;
}
buffer[len++] = *it++;
}
buffer[len] = '\0';
}
return is;
}
int main()
{
char *line = nullptr;
while (getline(std::cin, line))
{
if (line)
{
cout << line << endl;
delete[] line;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gUmVmOiBodHRwOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ucy5jb20vcmVmZXJlbmNlL2l0ZXJhdG9yL2lzdHJlYW1idWZfaXRlcmF0b3IvCi8vIFJlZjogaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMuY29tL3JlZmVyZW5jZS9pc3RyZWFtL2lzdHJlYW0vc2VudHJ5LwovLyBSZWY6IGh0dHA6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5zLmNvbS9yZWZlcmVuY2UvaXN0cmVhbS9pc3RyZWFtLwoKY2hhciAqYnVmZmVyX3JlYWxsb2MoY2hhciAqYnVmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCnsKCWlmIChvbGRTaXplID09IG5ld1NpemUpCgl7CgkJcmV0dXJuIGJ1ZjsKCX0KCQoJY2hhciAqbmV3QnVmID0gbnVsbHB0cjsKCXNpemVfdCBjb3VudCA9IDA7CgkKCWlmIChvbGRTaXplID4gbmV3U2l6ZSkKCQljb3VudCA9IG5ld1NpemU7CgllbHNlCgkJY291bnQgPSBvbGRTaXplOwoKCW5ld0J1ZiA9IG5ldyBjaGFyW25ld1NpemVdOwoJc3RkOjpjb3B5KGJ1ZiwgYnVmICsgY291bnQsIG5ld0J1Zik7CgkKCWRlbGV0ZVtdIGJ1ZjsKCXJldHVybiBuZXdCdWY7Cn0KCmlzdHJlYW0mIGdldGxpbmUoaXN0cmVhbSYgaXMsIGNoYXIgKiZidWZmZXIpCnsKCXN0ZDo6aXN0cmVhbTo6c2VudHJ5IHMoaXMpOwoJaWYgKHMpCgl7CgkJc3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IGl0KGlzKTsKCQlzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gZW5kOwoJCgkJc2l6ZV90IHNpemUgPSA0OwoJCXNpemVfdCBncm93ID0gNDsKCQlzaXplX3QgbGVuICA9IDA7CgkJCgkJYnVmZmVyID0gbmV3IGNoYXJbc2l6ZV07CgkKCQl3aGlsZSAoaXQgIT0gZW5kICYmICppdCAhPSAnXG4nKSAKCQl7CgkJCWlmIChsZW4gPT0gKHNpemUgLSAxKSkgCgkJCXsKCQkJCWJ1ZmZlciA9IGJ1ZmZlcl9yZWFsbG9jKGJ1ZmZlciwgc2l6ZSwgc2l6ZSArIGdyb3cpOwoJCQkJc2l6ZSArPSBncm93OwoJCQl9CgkJCgkJCWJ1ZmZlcltsZW4rK10gPSAqaXQrKzsKCQl9CgkKCQlidWZmZXJbbGVuXSA9ICdcMCc7Cgl9CgoJcmV0dXJuIGlzOwp9CgppbnQgbWFpbigpIAp7CgljaGFyICpsaW5lID0gbnVsbHB0cjsKCXdoaWxlIChnZXRsaW5lKHN0ZDo6Y2luLCBsaW5lKSkKCXsKCQlpZiAobGluZSkgCgkJewoJCQljb3V0IDw8IGxpbmUgPDwgZW5kbDsKCQkJZGVsZXRlW10gbGluZTsKCQl9Cgl9CgkKCXJldHVybiAwOwp9