#include <iostream>
#include <string>
#include <utility>
#include <vector>
using std::next;
template<typename Iter, typename Func, typename...Funcs>
void RotateHandlers(Iter b, Iter e, Func f, Funcs...fs) {
if (b != e) {
f(*b);
RotateHandlers(next(b), e, fs..., f);
}
}
int main() {
std::vector<std::string> v({"Hello", "world", "it's", "really", "great", "to", "be", "here"});
RotateHandlers(v.begin(), v.end(),
[](const std::string& s){std::cout << "First|" << s << std::endl;},
[](const std::string& s){std::cout << "Then |" << s << std::endl;},
[](const std::string& s){std::cout << "And |" << s << std::endl
<< " |" << std::string(s.size(), '-') << std::endl;}
);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgc3RkOjpuZXh0Owp0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyLCB0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZS4uLkZ1bmNzPgp2b2lkIFJvdGF0ZUhhbmRsZXJzKEl0ZXIgYiwgSXRlciBlLCBGdW5jIGYsIEZ1bmNzLi4uZnMpIHsKICAgIGlmIChiICE9IGUpIHsKICAgICAgICBmKCpiKTsKICAgICAgICBSb3RhdGVIYW5kbGVycyhuZXh0KGIpLCBlLCBmcy4uLiwgZik7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHYoeyJIZWxsbyIsICJ3b3JsZCIsICJpdCdzIiwgInJlYWxseSIsICJncmVhdCIsICJ0byIsICJiZSIsICJoZXJlIn0pOwogICAgUm90YXRlSGFuZGxlcnModi5iZWdpbigpLCB2LmVuZCgpLAogICAgICBbXShjb25zdCBzdGQ6OnN0cmluZyYgcyl7c3RkOjpjb3V0IDw8ICJGaXJzdHwiIDw8IHMgPDwgc3RkOjplbmRsO30sCiAgICAgIFtdKGNvbnN0IHN0ZDo6c3RyaW5nJiBzKXtzdGQ6OmNvdXQgPDwgIlRoZW4gfCIgPDwgcyA8PCBzdGQ6OmVuZGw7fSwKICAgICAgW10oY29uc3Qgc3RkOjpzdHJpbmcmIHMpe3N0ZDo6Y291dCA8PCAiQW5kICB8IiA8PCBzIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgICAgIHwiIDw8IHN0ZDo6c3RyaW5nKHMuc2l6ZSgpLCAnLScpIDw8IHN0ZDo6ZW5kbDt9CiAgICApOwogICAgcmV0dXJuIDA7Cn0=