#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;
}