#include <iostream>

template< int N >
struct Factorial
{
 enum {
  Value = N * Factorial< N - 1 >::Value
 };
};

template<>
struct Factorial< 1 >
{
 enum {
  Value = 1
 };
};

int main( int argc, char **argv )
{
std::cout << Factorial< 4 >::Value;
  return 0;
}