#include <iostream>
#include <utility>
int
main()
{
auto result = [](auto f) {
return [=](auto g) {
return [=](auto&&... args) {
return f(g(g), std::forward<decltype(args)>(args)...);
};
}([=](auto g) {
return [=](auto&&... args) {
return f(g(g), std::forward<decltype(args)>(args)...);
};
});
}([](auto f, int n) -> int {
return n < 2 ? n : (f(n - 1) + f(n - 2));
})(10);
std::cout << result << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCgppbnQKbWFpbigpCnsKICBhdXRvIHJlc3VsdCA9IFtdKGF1dG8gZikgewogICAgcmV0dXJuIFs9XShhdXRvIGcpIHsKICAgICAgcmV0dXJuIFs9XShhdXRvJiYuLi4gYXJncykgewogICAgICAgIHJldHVybiBmKGcoZyksIHN0ZDo6Zm9yd2FyZDxkZWNsdHlwZShhcmdzKT4oYXJncykuLi4pOwogICAgICB9OwogICAgfShbPV0oYXV0byBnKSB7CiAgICAgIHJldHVybiBbPV0oYXV0byYmLi4uIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZihnKGcpLCBzdGQ6OmZvcndhcmQ8ZGVjbHR5cGUoYXJncyk+KGFyZ3MpLi4uKTsKICAgICAgfTsKICAgIH0pOwogIH0oW10oYXV0byBmLCBpbnQgbikgLT4gaW50IHsKICAgIHJldHVybiBuIDwgMiA/IG4gOiAoZihuIC0gMSkgKyBmKG4gLSAyKSk7CiAgfSkoMTApOwogIHN0ZDo6Y291dCA8PCByZXN1bHQgPDwgc3RkOjplbmRsOwp9