// Template Meta Programing
#include <iostream>
template <long long N> struct factorial {
    static const long long value = N * factorial<N-1>::value;
};
template <> struct factorial<0> {
    static const long long value = 1;
};
int main()
{
    long long n = factorial<20>::value;
    std::cout << n;
}