#include <iostream>

template < typename Int >
 Int silnia( Int input )
 {
  Int ret = 1;
  for ( Int it = 2; it <= input; ++it )
   ret *= it;
  return ret;
 }

int main( )
{
 std::cout << "int: " << std::endl;
 for ( int it = 1; it < 30; ++it ) 
  std::cout << it << ": " << silnia(it) << std::endl;
  
 std::cout << "unsigned: " << std::endl;
 for ( int it = 1; it < 30; ++it ) 
  std::cout << it << ": " << silnia<unsigned>(it) << std::endl;
  
 std::cout << "long long: " << std::endl;
 for ( int it = 1; it < 30; ++it ) 
  std::cout << it << ": " << silnia<long long>(it) << std::endl;
  
 std::cout << " unsigned long long: " << std::endl;
 for ( int it = 1; it < 30; ++it ) 
  std::cout << it << ": " << silnia<unsigned long long>(it) << std::endl;
  
 return 0;
}