#include <iostream>
template<int N, int N3 = N % 3, int N5 = N % 5>
struct fizzbuzz {
static int value() {
return N;
}
};
template<int N, int N5>
struct fizzbuzz<N,0,N5> {
static const char* value() {
return "Fizz";
}
};
template<int N, int N3>
struct fizzbuzz<N,N3,0> {
static const char* value() {
return "Buzz";
}
};
template<int N>
struct fizzbuzz<N,0,0> {
static const char* value() {
return "FizzBuzz";
}
};
template<int i>
struct loop {
static inline void execute() {
std::cout << fizzbuzz<i>::value() << "\n";
loop<i-1>::execute();
}
};
template<>
struct loop<1> {
static inline void execute() {
std::cout << fizzbuzz<1>::value() << "\n";
}
};
int main() {
loop<100>::execute();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp0ZW1wbGF0ZTxpbnQgTiwgaW50IE4zID0gTiAlIDMsIGludCBONSA9IE4gJSA1PgpzdHJ1Y3QgZml6emJ1enogewogICAgc3RhdGljIGludCB2YWx1ZSgpIHsKICAgICAgICByZXR1cm4gTjsKICAgIH0KfTsKCnRlbXBsYXRlPGludCBOLCBpbnQgTjU+CnN0cnVjdCBmaXp6YnV6ejxOLDAsTjU+IHsKICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2YWx1ZSgpIHsKICAgICAgICByZXR1cm4gIkZpenoiOyAKICAgIH0KfTsKCnRlbXBsYXRlPGludCBOLCBpbnQgTjM+CnN0cnVjdCBmaXp6YnV6ejxOLE4zLDA+IHsKICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2YWx1ZSgpIHsKICAgICAgICByZXR1cm4gIkJ1enoiOwogICAgfQp9OwoKdGVtcGxhdGU8aW50IE4+CnN0cnVjdCBmaXp6YnV6ejxOLDAsMD4gewogICAgc3RhdGljIGNvbnN0IGNoYXIqIHZhbHVlKCkgewogICAgICAgIHJldHVybiAiRml6ekJ1enoiOwogICAgfQp9OwoKdGVtcGxhdGU8aW50IGk+CnN0cnVjdCBsb29wIHsKICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBleGVjdXRlKCkgewogICAgICAgIHN0ZDo6Y291dCA8PCBmaXp6YnV6ejxpPjo6dmFsdWUoKSA8PCAiXG4iOwogICAgICAgIGxvb3A8aS0xPjo6ZXhlY3V0ZSgpOwogICAgfQp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgbG9vcDwxPiB7CiAgICBzdGF0aWMgaW5saW5lIHZvaWQgZXhlY3V0ZSgpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgZml6emJ1eno8MT46OnZhbHVlKCkgPDwgIlxuIjsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgbG9vcDwxMDA+OjpleGVjdXRlKCk7Cn0=