#include <iostream>
using namespace std;
struct intervall_range_proxy {};
template <typename T>
struct intervall
{
T lower;
T upper;
};
template <typename T>
intervall<T> operator*(T val, intervall_range_proxy)
{
return {val, T()};
}
template <typename T>
intervall<T> operator*(intervall<T> a, T val)
{
return {a.lower, val};
}
#define AND *intervall_range_proxy{}*
template <typename T>
bool operator+(T val, intervall<T> i)
{
return i.lower <= val && val < i.upper;
}
#define BETWEEN +
int main() {
auto i = 5 AND 7;
cout << i.lower << ' ' << i.upper << '\n';
cout << 6 BETWEEN i << '\n';
cout << 2 BETWEEN 1 AND 10 << '\n';
cout << 0 BETWEEN 1 AND 10 << '\n';
cout << 1 BETWEEN 1 AND 10 << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGludGVydmFsbF9yYW5nZV9wcm94eSB7fTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgaW50ZXJ2YWxsCnsKCVQgbG93ZXI7CglUIHVwcGVyOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmludGVydmFsbDxUPiBvcGVyYXRvciooVCB2YWwsIGludGVydmFsbF9yYW5nZV9wcm94eSkKewoJcmV0dXJuIHt2YWwsIFQoKX07Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgppbnRlcnZhbGw8VD4gb3BlcmF0b3IqKGludGVydmFsbDxUPiBhLCBUIHZhbCkKewoJcmV0dXJuIHthLmxvd2VyLCB2YWx9Owp9CgojZGVmaW5lIEFORCAqaW50ZXJ2YWxsX3JhbmdlX3Byb3h5e30qCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KYm9vbCBvcGVyYXRvcisoVCB2YWwsIGludGVydmFsbDxUPiBpKQp7CglyZXR1cm4gaS5sb3dlciA8PSB2YWwgJiYgdmFsIDwgaS51cHBlcjsKfQoKI2RlZmluZSBCRVRXRUVOICsKCmludCBtYWluKCkgewoJYXV0byBpID0gNSBBTkQgNzsKCWNvdXQgPDwgaS5sb3dlciA8PCAnICcgPDwgaS51cHBlciA8PCAnXG4nOwoJY291dCA8PCA2IEJFVFdFRU4gaSA8PCAnXG4nOwoJY291dCA8PCAyIEJFVFdFRU4gMSBBTkQgMTAgPDwgJ1xuJzsKCWNvdXQgPDwgMCBCRVRXRUVOIDEgQU5EIDEwIDw8ICdcbic7Cgljb3V0IDw8IDEgQkVUV0VFTiAxIEFORCAxMCA8PCAnXG4nOwp9