#include <iostream>
#include <stack>
using namespace std;
int fib(int n) {
// cur loc 0
if (n == 0) return 0;
if (n == 1) return 1;
// cur loc 1
return fib(n - 1) + fib(n - 2);
}
struct Call {
int n;
int cur_loc;
};
int G(int n) {
Call initial_call;
initial_call.n = n;
initial_call.cur_loc = 0;
stack<Call> st;
st.push(initial_call);
int last_ret_val = 0; // Return value of last finished call
while (!st.empty()) {
Call& call = st.top();
if (call.cur_loc == 0) {
if (call.n <= 1) {
last_ret_val = call.n;
st.pop();
}
else {
Call new_call;
new_call.cur_loc = 0;
new_call.n = call.n - 1;
st.push(new_call);
Call new_call2;
new_call2.cur_loc = 0;
new_call2.n = call.n - 2;
st.push(new_call2);
call.cur_loc = 1;
}
}
else if (call.cur_loc == 1) {
last_ret_val += st.top().n;
st.pop();
last_ret_val += st.top().n;
st.pop();
}
}
return last_ret_val;
}
int main() {
for (int i = 0; i < 7; i++) {
cout << fib(i) << " ";
}
cout << endl;
return 0;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0YWNrPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgZmliKGludCBuKSB7CiAgICAvLyBjdXIgbG9jIDAgCiAgICBpZiAobiA9PSAwKSByZXR1cm4gMDsKICAgIGlmIChuID09IDEpIHJldHVybiAxOwogICAgLy8gY3VyIGxvYyAxCiAgICByZXR1cm4gZmliKG4gLSAxKSArIGZpYihuIC0gMik7Cn0KCnN0cnVjdCBDYWxsIHsKICAgIGludCBuOyAgCiAgICBpbnQgY3VyX2xvYzsgCgp9OwoKaW50IEcoaW50IG4pIHsKICAgIENhbGwgaW5pdGlhbF9jYWxsOwogICAgaW5pdGlhbF9jYWxsLm4gPSBuOwogICAgaW5pdGlhbF9jYWxsLmN1cl9sb2MgPSAwOwoKICAgIHN0YWNrPENhbGw+IHN0OwogICAgc3QucHVzaChpbml0aWFsX2NhbGwpOwoKICAgIGludCBsYXN0X3JldF92YWwgPSAwOyAvLyBSZXR1cm4gdmFsdWUgb2YgbGFzdCBmaW5pc2hlZCBjYWxsCiAgIAogICAgd2hpbGUgKCFzdC5lbXB0eSgpKSB7CiAgICAgICAgQ2FsbCYgY2FsbCA9IHN0LnRvcCgpOwogICAgICAgIGlmIChjYWxsLmN1cl9sb2MgPT0gMCkgewogICAgICAgICAgICBpZiAoY2FsbC5uIDw9IDEpIHsKICAgICAgICAgICAgICAgIGxhc3RfcmV0X3ZhbCA9IGNhbGwubjsKICAgICAgICAgICAgICAgIHN0LnBvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgIENhbGwgbmV3X2NhbGw7CiAgICAgICAgICAgICAgICBuZXdfY2FsbC5jdXJfbG9jID0gMDsKICAgICAgICAgICAgICAgIG5ld19jYWxsLm4gPSBjYWxsLm4gLSAxOwogICAgICAgICAgICAgICAgc3QucHVzaChuZXdfY2FsbCk7CgogICAgICAgICAgICAgICAgQ2FsbCBuZXdfY2FsbDI7CiAgICAgICAgICAgICAgICBuZXdfY2FsbDIuY3VyX2xvYyA9IDA7CiAgICAgICAgICAgICAgICBuZXdfY2FsbDIubiA9IGNhbGwubiAtIDI7CiAgICAgICAgICAgICAgICBzdC5wdXNoKG5ld19jYWxsMik7CiAgICAgICAgICAgICAgICBjYWxsLmN1cl9sb2MgPSAxOwogICAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjYWxsLmN1cl9sb2MgPT0gMSkgewogICAgICAgICAgICBsYXN0X3JldF92YWwgKz0gc3QudG9wKCkubjsKICAgICAgICAgICAgc3QucG9wKCk7CiAgICAgICAgICAgIGxhc3RfcmV0X3ZhbCArPSBzdC50b3AoKS5uOwogICAgICAgICAgICBzdC5wb3AoKTsKCiAgICAgICAgfQoKICAgIH0KICAgIHJldHVybiBsYXN0X3JldF92YWw7Cn0KCgppbnQgbWFpbigpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNzsgaSsrKSB7CiAgICAgICAgY291dCA8PCBmaWIoaSkgPDwgIiAiOwogICAgfQogICAgY291dCA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0K