#include <iostream>
template<const unsigned N>
struct Factorial
{
enum V
{
val = N * Factorial<N-1>::val
};
};
template<>
struct Factorial<1>
{
enum V
{
val = 1
};
};
int main()
{
std::cout << Factorial<5>::val << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8Y29uc3QgdW5zaWduZWQgTj4Kc3RydWN0IEZhY3RvcmlhbAp7CiAgICBlbnVtIFYKICAgIHsKICAgICAgICB2YWwgPSBOICogRmFjdG9yaWFsPE4tMT46OnZhbAogICAgfTsKfTsKdGVtcGxhdGU8PgpzdHJ1Y3QgRmFjdG9yaWFsPDE+CnsKICAgIGVudW0gVgogICAgewogICAgICAgIHZhbCA9IDEKICAgIH07Cn07CgppbnQgbWFpbigpCnsKCXN0ZDo6Y291dCA8PCBGYWN0b3JpYWw8NT46OnZhbCA8PCBzdGQ6OmVuZGw7Cn0=