#include <iostream>
#include <utility>
#include <tuple>
#include <iterator>
#include <vector>
template<class It>
struct range_t {
It b; It e;
It begin() const { return b; }
It end() const { return e; }
};
template<class It>
range_t<It> range(It s, It f) {
return {s,f};
}
template<class C>
auto backwards(C&& c) {
using std::rbegin; using std::rend;
return range( rbegin(c), rend(c) );
}
int main() {
std::cout << "Enter some text (blank line to finish):\n";
std::string line;
std::vector<std::string> lines;
while (std::getline(std::cin, line))
lines.push_back(line);
for (auto&& line:backwards(lines))
std::cout << line << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHR1cGxlPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp0ZW1wbGF0ZTxjbGFzcyBJdD4Kc3RydWN0IHJhbmdlX3QgewogICAgSXQgYjsgSXQgZTsKCiAgICBJdCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGI7IH0KICAgIEl0IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGU7IH0KfTsKCnRlbXBsYXRlPGNsYXNzIEl0PgpyYW5nZV90PEl0PiByYW5nZShJdCBzLCBJdCBmKSB7CiAgICByZXR1cm4ge3MsZn07Cn0KdGVtcGxhdGU8Y2xhc3MgQz4KYXV0byBiYWNrd2FyZHMoQyYmIGMpIHsKICAgIHVzaW5nIHN0ZDo6cmJlZ2luOyB1c2luZyBzdGQ6OnJlbmQ7CiAgICByZXR1cm4gcmFuZ2UoIHJiZWdpbihjKSwgcmVuZChjKSApOwp9CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6Y291dCA8PCAiRW50ZXIgc29tZSB0ZXh0IChibGFuayBsaW5lIHRvIGZpbmlzaCk6XG4iOwogICAgc3RkOjpzdHJpbmcgbGluZTsKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5lczsKICAgIHdoaWxlIChzdGQ6OmdldGxpbmUoc3RkOjpjaW4sIGxpbmUpKQogICAgICAgIGxpbmVzLnB1c2hfYmFjayhsaW5lKTsKICAgIGZvciAoYXV0byYmIGxpbmU6YmFja3dhcmRzKGxpbmVzKSkKICAgICAgICBzdGQ6OmNvdXQgPDwgbGluZSA8PCAiXG4iOwp9