#include <stdio.h>
#include <stdlib.h>
void print0() { printf("0\n"); }
void print1() { printf("1\n"); }
void print2() { printf("2\n"); }
void print3() { printf("3\n"); }
typedef void(*ActionFunction)();
bool _menu(int condition, int action_counter, ActionFunction action)
{
if (action_counter == condition) {
action();
return true;
} else {
return false;
}
}
template<typename... Args>
bool _menu(int condition, int action_counter, ActionFunction action, Args... args)
{
if (action_counter == condition) {
action();
return true;
}
return _menu(condition, ++action_counter, args...);
}
template<typename... Args>
bool menu(int condition, ActionFunction action, Args... args)
{
return _menu(condition, 0, action, args...);
}
int main() {
menu(1, print0, print1, print2, print3);
menu('2' - 48, print0, print1, print2, print3);
menu(getchar() - 48, print0, print1, print2, print3);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnZvaWQgcHJpbnQwKCkgeyBwcmludGYoIjBcbiIpOyB9CnZvaWQgcHJpbnQxKCkgeyBwcmludGYoIjFcbiIpOyB9CnZvaWQgcHJpbnQyKCkgeyBwcmludGYoIjJcbiIpOyB9CnZvaWQgcHJpbnQzKCkgeyBwcmludGYoIjNcbiIpOyB9Cgp0eXBlZGVmIHZvaWQoKkFjdGlvbkZ1bmN0aW9uKSgpOwoKYm9vbCBfbWVudShpbnQgY29uZGl0aW9uLCBpbnQgYWN0aW9uX2NvdW50ZXIsIEFjdGlvbkZ1bmN0aW9uIGFjdGlvbikKewoJaWYgKGFjdGlvbl9jb3VudGVyID09IGNvbmRpdGlvbikgewoJCWFjdGlvbigpOwoJCXJldHVybiB0cnVlOwoJfSBlbHNlIHsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KYm9vbCBfbWVudShpbnQgY29uZGl0aW9uLCBpbnQgYWN0aW9uX2NvdW50ZXIsIEFjdGlvbkZ1bmN0aW9uIGFjdGlvbiwgQXJncy4uLiBhcmdzKQp7CglpZiAoYWN0aW9uX2NvdW50ZXIgPT0gY29uZGl0aW9uKSB7CgkJYWN0aW9uKCk7CgkJcmV0dXJuIHRydWU7Cgl9CglyZXR1cm4gX21lbnUoY29uZGl0aW9uLCArK2FjdGlvbl9jb3VudGVyLCBhcmdzLi4uKTsKfQp0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgpib29sIG1lbnUoaW50IGNvbmRpdGlvbiwgQWN0aW9uRnVuY3Rpb24gYWN0aW9uLCBBcmdzLi4uIGFyZ3MpCnsKCXJldHVybiBfbWVudShjb25kaXRpb24sIDAsIGFjdGlvbiwgYXJncy4uLik7Cn0KCmludCBtYWluKCkgewoJbWVudSgxLCBwcmludDAsIHByaW50MSwgcHJpbnQyLCBwcmludDMpOwoJbWVudSgnMicgLSA0OCwgcHJpbnQwLCBwcmludDEsIHByaW50MiwgcHJpbnQzKTsKCW1lbnUoZ2V0Y2hhcigpIC0gNDgsIHByaW50MCwgcHJpbnQxLCBwcmludDIsIHByaW50Myk7CglyZXR1cm4gMDsKfQ==