#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;
}