#include <iostream>
using namespace std;
typedef void (*F)();
template<F f> struct Goal
{
Goal() { f(); }
};
template<F f> struct Singleton
{
static Goal<f> instance;
};
template<F f> Goal<f> Singleton<f>::instance;
template<F f, Goal<f>* I> struct Instantiator {};
template<F f> struct Voila : Instantiator<f, &Singleton<f>::instance> {};
void foo() { cout << "foo" << endl; }
Voila<foo> voici;
int main() {
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiB2b2lkICgqRikoKTsKCnRlbXBsYXRlPEYgZj4gc3RydWN0IEdvYWwKewoJR29hbCgpIHsgZigpOyB9Cn07Cgp0ZW1wbGF0ZTxGIGY+IHN0cnVjdCBTaW5nbGV0b24KewoJc3RhdGljIEdvYWw8Zj4gaW5zdGFuY2U7Cn07CnRlbXBsYXRlPEYgZj4gR29hbDxmPiBTaW5nbGV0b248Zj46Omluc3RhbmNlOwoKdGVtcGxhdGU8RiBmLCBHb2FsPGY+KiBJPiBzdHJ1Y3QgSW5zdGFudGlhdG9yIHt9OwoKdGVtcGxhdGU8RiBmPiBzdHJ1Y3QgVm9pbGEgOiBJbnN0YW50aWF0b3I8ZiwgJlNpbmdsZXRvbjxmPjo6aW5zdGFuY2U+IHt9OwoKdm9pZCBmb28oKSB7IGNvdXQgPDwgImZvbyIgPDwgZW5kbDsgfQpWb2lsYTxmb28+IHZvaWNpOwoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQ==