#include <iostream>
#include <utility>
#include <vector>
template <int a, int b, int c> void foo() { std::cout << a << b << c << std::endl; }
template <std::size_t ... Is>
void foo(int index, std::index_sequence<Is...>)
{
using f_type = void();
f_type* f[] = {&foo<1 + Is / 16, 1 + (Is / 4) % 4, 1 + Is % 4>...};
f[index]();
}
void foo(int a, int b, int c)
{
foo((a - 1) * 16 + (b - 1) * 4 + c - 1, std::make_index_sequence<64>());
}
int main()
{
foo(1, 1, 1);
foo(1, 2, 3);
foo(4, 4, 4);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHZlY3Rvcj4KCnRlbXBsYXRlIDxpbnQgYSwgaW50IGIsIGludCBjPiB2b2lkIGZvbygpIHsgc3RkOjpjb3V0IDw8IGEgPDwgYiA8PCBjIDw8IHN0ZDo6ZW5kbDsgfQoKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IC4uLiBJcz4Kdm9pZCBmb28oaW50IGluZGV4LCBzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPikKewogICAgdXNpbmcgZl90eXBlID0gdm9pZCgpOwogICAgZl90eXBlKiBmW10gPSB7JmZvbzwxICsgSXMgLyAxNiwgMSArIChJcyAvIDQpICUgNCwgMSArIElzICUgND4uLi59OwogICAgCiAgICBmW2luZGV4XSgpOwp9Cgp2b2lkIGZvbyhpbnQgYSwgaW50IGIsIGludCBjKQp7CiAgICBmb28oKGEgLSAxKSAqIDE2ICsgKGIgLSAxKSAqIDQgKyBjIC0gMSwgc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPDY0PigpKTsgICAKfQoKCmludCBtYWluKCkKewogICAgZm9vKDEsIDEsIDEpOwogICAgZm9vKDEsIDIsIDMpOwogICAgZm9vKDQsIDQsIDQpOwp9