#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::cerr;
#include <stdexcept>
using std::out_of_range;
#include <limits>
class OUTofRage : public out_of_range
{
public:
OUTofRage()
: out_of_range("Out Of Range\n") {}
} ;
long long fibonacci(long long target, long long numberOne, long long numberTwo);
int main() {
try {
cout << endl << fibonacci(91, 0, 1) << endl << endl;
}
catch( std::exception &ex ) {
std::cout << "error:" << ex.what() << std::endl;
}
return 0;
}
long long fibonacci(long long target, long long numberOne, long long numberTwo)
{
if(std::numeric_limits<decltype(numberOne)>::max() - numberOne < numberTwo)
throw OUTofRage();
if(target == 0)
return numberOne + numberTwo;
return fibonacci(target-1, numberTwo, numberOne + numberTwo);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgc3RkOjpjb3V0Owp1c2luZyBzdGQ6OmNpbjsKdXNpbmcgc3RkOjplbmRsOwp1c2luZyBzdGQ6OmNlcnI7CgojaW5jbHVkZSA8c3RkZXhjZXB0Pgp1c2luZyBzdGQ6Om91dF9vZl9yYW5nZTsKCiNpbmNsdWRlIDxsaW1pdHM+CgpjbGFzcyBPVVRvZlJhZ2UgOiBwdWJsaWMgb3V0X29mX3JhbmdlCnsKICAgcHVibGljOgogICAgICBPVVRvZlJhZ2UoKQogICAgICAgICAgOiBvdXRfb2ZfcmFuZ2UoIk91dCBPZiBSYW5nZVxuIikge30KfSA7Cgpsb25nIGxvbmcgZmlib25hY2NpKGxvbmcgbG9uZyB0YXJnZXQsIGxvbmcgbG9uZyBudW1iZXJPbmUsIGxvbmcgbG9uZyBudW1iZXJUd28pOwoKaW50IG1haW4oKSB7Cgl0cnkgewogICAgICAgY291dCA8PCBlbmRsIDw8IGZpYm9uYWNjaSg5MSwgMCwgMSkgPDwgZW5kbCA8PCBlbmRsOwoJfQoJY2F0Y2goIHN0ZDo6ZXhjZXB0aW9uICZleCApIHsKCQlzdGQ6OmNvdXQgPDwgImVycm9yOiIgPDwgZXgud2hhdCgpIDw8IHN0ZDo6ZW5kbDsKCX0KICAgIHJldHVybiAwOwp9Cgpsb25nIGxvbmcgZmlib25hY2NpKGxvbmcgbG9uZyB0YXJnZXQsIGxvbmcgbG9uZyBudW1iZXJPbmUsIGxvbmcgbG9uZyBudW1iZXJUd28pCnsKICAgIGlmKHN0ZDo6bnVtZXJpY19saW1pdHM8ZGVjbHR5cGUobnVtYmVyT25lKT46Om1heCgpIC0gbnVtYmVyT25lIDwgbnVtYmVyVHdvKSAKICAgICAgICAgdGhyb3cgT1VUb2ZSYWdlKCk7CgogICAgaWYodGFyZ2V0ID09IDApIAogICAgICAgIHJldHVybiBudW1iZXJPbmUgKyBudW1iZXJUd287CiAgICAgICAgCiAgICByZXR1cm4gZmlib25hY2NpKHRhcmdldC0xLCBudW1iZXJUd28sIG51bWJlck9uZSArIG51bWJlclR3byk7Cn0=