int arr[50];
int f(int a, int b=0) {
if (b==-1) return 1;
if (a==1) return 0;
if (a==2) return 2;
int r=f(a-2, arr[a-1]);
int l=f(a-1, arr[a-2]);
return (l+r);
}
#include <vector>
int f2(int a, int b=0) {
static std::vector<int> m(100, -1);
if (b==-1) return 1;
if (a==1) return 0;
if (a==2) return 2;
if (m.at(a) != -1) return m[a];
int r = f2(a-2, arr[a-1]);
int l = f2(a-1, arr[a-2]);
m[a] = l+r;
return l+r;
}
#include <iostream>
#include <ctime>
int main() {
const int num_test = 42;
clock_t begin = clock();
int s=0;
for(int i=1; i<num_test; ++i)
s += f(i);
clock_t diff = clock()-begin;
std::cout << s << ':' << double(diff)/CLOCKS_PER_SEC << '\n';
begin = clock();
s=0;
for(int i=1; i<num_test; ++i)
s += f2(i);
diff = clock()-begin;
std::cout << s << ':' << double(diff)/CLOCKS_PER_SEC << '\n';
}
aW50IGFycls1MF07CgppbnQgZihpbnQgYSwgaW50IGI9MCkgewogICBpZiAoYj09LTEpIHJldHVybiAxOwogICBpZiAoYT09MSkgcmV0dXJuIDA7CiAgIGlmIChhPT0yKSByZXR1cm4gMjsKICAgaW50IHI9ZihhLTIsIGFyclthLTFdKTsKICAgaW50IGw9ZihhLTEsIGFyclthLTJdKTsKICAgcmV0dXJuIChsK3IpOwp9CgojaW5jbHVkZSA8dmVjdG9yPgppbnQgZjIoaW50IGEsIGludCBiPTApIHsKICAgc3RhdGljIHN0ZDo6dmVjdG9yPGludD4gbSgxMDAsIC0xKTsKICAgaWYgKGI9PS0xKSByZXR1cm4gMTsKICAgaWYgKGE9PTEpIHJldHVybiAwOwogICBpZiAoYT09MikgcmV0dXJuIDI7CiAgIGlmIChtLmF0KGEpICE9IC0xKSByZXR1cm4gbVthXTsKICAgaW50IHIgPSBmMihhLTIsIGFyclthLTFdKTsKICAgaW50IGwgPSBmMihhLTEsIGFyclthLTJdKTsKICAgbVthXSA9IGwrcjsKICAgcmV0dXJuIGwrcjsKfQoKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3RpbWU+CmludCBtYWluKCkgewogICBjb25zdCBpbnQgbnVtX3Rlc3QgPSA0MjsKCiAgIGNsb2NrX3QgYmVnaW4gPSBjbG9jaygpOwogICBpbnQgcz0wOwogICBmb3IoaW50IGk9MTsgaTxudW1fdGVzdDsgKytpKQogICAgICBzICs9IGYoaSk7CiAgIGNsb2NrX3QgZGlmZiA9IGNsb2NrKCktYmVnaW47CiAgIHN0ZDo6Y291dCA8PCBzIDw8ICc6JyA8PCBkb3VibGUoZGlmZikvQ0xPQ0tTX1BFUl9TRUMgPDwgJ1xuJzsKCiAgIGJlZ2luID0gY2xvY2soKTsKICAgcz0wOwogICBmb3IoaW50IGk9MTsgaTxudW1fdGVzdDsgKytpKQogICAgICBzICs9IGYyKGkpOwogICBkaWZmID0gY2xvY2soKS1iZWdpbjsKICAgc3RkOjpjb3V0IDw8IHMgPDwgJzonIDw8IGRvdWJsZShkaWZmKS9DTE9DS1NfUEVSX1NFQyA8PCAnXG4nOwp9