#include <iostream>
#include <cstdlib>
#include <cstring>
#include <memory>
char* read_line(FILE* input);
int main() {
std::unique_ptr<char[]> str;
str.reset(read_line(stdin));
std::cout << "read: [" << str.get() << "]" << std::endl;
return 0;
}
char* read_impl(FILE* input, size_t size, int ch);
char* read_line(FILE* input)
{
return read_impl(input, 0, fgetc(input));
}
char* read_impl(FILE* input, size_t size, int ch)
{
char* str;
if (ch == EOF || ch == '\n')
{
str = new char [size + 1];
str[size] = '\0';
}
else
{
str = read_impl(input, size + 1, fgetc(input));
str[size] = char{ch};
}
return str;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxtZW1vcnk+CgpjaGFyKiByZWFkX2xpbmUoRklMRSogaW5wdXQpOwoKaW50IG1haW4oKSB7CglzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBzdHI7CgkKCXN0ci5yZXNldChyZWFkX2xpbmUoc3RkaW4pKTsKCQoJc3RkOjpjb3V0IDw8ICJyZWFkOiBbIiA8PCBzdHIuZ2V0KCkgPDwgIl0iIDw8IHN0ZDo6ZW5kbDsKCQoJcmV0dXJuIDA7Cn0KY2hhciogcmVhZF9pbXBsKEZJTEUqIGlucHV0LCBzaXplX3Qgc2l6ZSwgaW50IGNoKTsKCmNoYXIqIHJlYWRfbGluZShGSUxFKiBpbnB1dCkKewoJcmV0dXJuIHJlYWRfaW1wbChpbnB1dCwgMCwgZmdldGMoaW5wdXQpKTsKfQoKY2hhciogcmVhZF9pbXBsKEZJTEUqIGlucHV0LCBzaXplX3Qgc2l6ZSwgaW50IGNoKQp7CgljaGFyKiBzdHI7CglpZiAoY2ggPT0gRU9GIHx8IGNoID09ICdcbicpCgl7CgkJc3RyID0gbmV3IGNoYXIgW3NpemUgKyAxXTsKCQlzdHJbc2l6ZV0gPSAnXDAnOwoJfQoJZWxzZQoJewoJCXN0ciA9IHJlYWRfaW1wbChpbnB1dCwgc2l6ZSArIDEsIGZnZXRjKGlucHV0KSk7CgkJc3RyW3NpemVdID0gY2hhcntjaH07Cgl9CglyZXR1cm4gc3RyOwp9