#include <iostream>
#include <functional>
using namespace std;
struct Callback{
std::function<void(void)> func;
Callback* next = nullptr;
Callback* call(){
func();
return next;
}
};
void foo(){
cout << "foo\n";
}
void bar(){
cout << "bar\n";
}
int main() {
Callback fooCaller{foo,nullptr};
Callback barCaller{bar,&fooCaller};
fooCaller.next=&barCaller;
Callback* nextCaller = &fooCaller;
for(int i=0; i<10;++i)
nextCaller = nextCaller->call();
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBDYWxsYmFja3sKCXN0ZDo6ZnVuY3Rpb248dm9pZCh2b2lkKT4gZnVuYzsKCUNhbGxiYWNrKiBuZXh0ID0gbnVsbHB0cjsKCQoJQ2FsbGJhY2sqIGNhbGwoKXsKCQlmdW5jKCk7CgkJcmV0dXJuIG5leHQ7Cgl9Cn07Cgp2b2lkIGZvbygpewoJY291dCA8PCAiZm9vXG4iOwp9Cgp2b2lkIGJhcigpewoJY291dCA8PCAiYmFyXG4iOwp9CgppbnQgbWFpbigpIHsKCUNhbGxiYWNrIGZvb0NhbGxlcntmb28sbnVsbHB0cn07CglDYWxsYmFjayBiYXJDYWxsZXJ7YmFyLCZmb29DYWxsZXJ9OwoJZm9vQ2FsbGVyLm5leHQ9JmJhckNhbGxlcjsKCQoJQ2FsbGJhY2sqIG5leHRDYWxsZXIgPSAmZm9vQ2FsbGVyOwoJZm9yKGludCBpPTA7IGk8MTA7KytpKQoJCW5leHRDYWxsZXIgPSBuZXh0Q2FsbGVyLT5jYWxsKCk7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQ==