#include <iostream>
using namespace std;
namespace Sys {
// RANGE BASED Loops
class range {
private:
int first;
int last;
int iter;
public:
range(int end):
first(0),
last(end),
iter(0)
{}
range(int start, int end) :
first(start),
last(end),
iter(start)
{}
// Iterable functions
const range& begin() const { return *this; }
const range& end() const { return *this; }
// Iterator functions
bool operator!=(const range&) const { return iter < last; }
void operator++() { ++iter; }
int operator*() const { return iter; }
};
// Golang style DEFER
// Usage defer(statement);
template <typename F>
struct DeferredAction {
private:
F f;
public:
DeferredAction(F f) : f(f) {}
~DeferredAction() { f(); }
};
template <typename F>
DeferredAction<F> defer_func(F f) {
return DeferredAction<F>(f);
}
#define $DEFER_1(x, y) x##y
#define $DEFER_2(x, y) $DEFER_1(x, y)
#define $DEFER_3(x) $DEFER_2(x, __COUNTER__)
#define $defer(code) auto $DEFER_3(_defer_) = ::Sys::defer_func([&](){code;})
}
int main() {
// your code goes here
$defer(std::cout << "Hello World");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbmFtZXNwYWNlIFN5cyB7CgovLyBSQU5HRSBCQVNFRCBMb29wcwpjbGFzcyByYW5nZSB7CnByaXZhdGU6CiAgICBpbnQgZmlyc3Q7CiAgICBpbnQgbGFzdDsKICAgIGludCBpdGVyOwoKcHVibGljOgogICAgcmFuZ2UoaW50IGVuZCk6CiAgICAgICAgZmlyc3QoMCksCiAgICAgICAgbGFzdChlbmQpLAogICAgICAgIGl0ZXIoMCkKICAgIHt9CgogICAgcmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSA6CiAgICAgICAgZmlyc3Qoc3RhcnQpLAogICAgICAgIGxhc3QoZW5kKSwKICAgICAgICBpdGVyKHN0YXJ0KQogICAge30KCiAgICAvLyBJdGVyYWJsZSBmdW5jdGlvbnMKICAgIGNvbnN0IHJhbmdlJiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CiAgICBjb25zdCByYW5nZSYgZW5kKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAvLyBJdGVyYXRvciBmdW5jdGlvbnMKICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCByYW5nZSYpIGNvbnN0IHsgcmV0dXJuIGl0ZXIgPCBsYXN0OyB9CiAgICB2b2lkIG9wZXJhdG9yKysoKSB7ICsraXRlcjsgfQogICAgaW50IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIGl0ZXI7IH0KfTsKCi8vIEdvbGFuZyBzdHlsZSBERUZFUgovLyBVc2FnZSBkZWZlcihzdGF0ZW1lbnQpOwoKdGVtcGxhdGUgPHR5cGVuYW1lIEY+CnN0cnVjdCBEZWZlcnJlZEFjdGlvbiB7CnByaXZhdGU6CglGIGY7CnB1YmxpYzoKCURlZmVycmVkQWN0aW9uKEYgZikgOiBmKGYpIHt9Cgl+RGVmZXJyZWRBY3Rpb24oKSB7IGYoKTsgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIEY+CkRlZmVycmVkQWN0aW9uPEY+IGRlZmVyX2Z1bmMoRiBmKSB7CglyZXR1cm4gRGVmZXJyZWRBY3Rpb248Rj4oZik7Cn0KCiNkZWZpbmUgJERFRkVSXzEoeCwgeSkgeCMjeQojZGVmaW5lICRERUZFUl8yKHgsIHkpICRERUZFUl8xKHgsIHkpCiNkZWZpbmUgJERFRkVSXzMoeCkgICAgJERFRkVSXzIoeCwgX19DT1VOVEVSX18pCiNkZWZpbmUgJGRlZmVyKGNvZGUpICAgYXV0byAkREVGRVJfMyhfZGVmZXJfKSA9ICAgICA6OlN5czo6ZGVmZXJfZnVuYyhbJl0oKXtjb2RlO30pCgp9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCSRkZWZlcihzdGQ6OmNvdXQgPDwgIkhlbGxvIFdvcmxkIik7CglyZXR1cm4gMDsKfQ==