#include <iostream>
#include <cstdint>
std::intmax_t F(const std::intmax_t& M, const std::intmax_t& N) {
if (M == 0) { return N + 1; }
if (N == 0) { return F(M - 1, 1); }
return F(M - 1, F(M, N - 1));
}
int main() {
std::intmax_t M = 0;
std::intmax_t N = 0;
std::intmax_t A = 0;
M = 2;
N = 1;
A = F(M, N);
std::cout << "F(" << M << ',' << N << ")=" << A << std::endl;
M = 4;
N = 1;
A = F(M, N);
std::cout << "F(" << M << ',' << N << ")=" << A << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGludD4KCnN0ZDo6aW50bWF4X3QgRihjb25zdCBzdGQ6OmludG1heF90JiBNLCBjb25zdCBzdGQ6OmludG1heF90JiBOKSB7CgoJaWYgKE0gPT0gMCkgeyByZXR1cm4gTiArIDE7IH0KCWlmIChOID09IDApIHsgcmV0dXJuIEYoTSAtIDEsIDEpOyB9CglyZXR1cm4gRihNIC0gMSwgRihNLCBOIC0gMSkpOwp9CgppbnQgbWFpbigpIHsKCXN0ZDo6aW50bWF4X3QgTSA9IDA7CglzdGQ6OmludG1heF90IE4gPSAwOwoJc3RkOjppbnRtYXhfdCBBID0gMDsKCglNID0gMjsKCU4gPSAxOwoJQSA9IEYoTSwgTik7CglzdGQ6OmNvdXQgPDwgIkYoIiA8PCBNIDw8ICcsJyA8PCBOIDw8ICIpPSIgPDwgQSA8PCBzdGQ6OmVuZGw7CgoJTSA9IDQ7CglOID0gMTsKCUEgPSBGKE0sIE4pOwoJc3RkOjpjb3V0IDw8ICJGKCIgPDwgTSA8PCAnLCcgPDwgTiA8PCAiKT0iIDw8IEEgPDwgc3RkOjplbmRsOwoKCXJldHVybiAwOwp9