// Success.

#include <iostream>
#include <type_traits>
#include <cstdint>
#include <ciso646>

template <int64_t N, int64_t K>
class Binomial
    {
    typedef typename std::enable_if<(N >= K and K >= 0), int64_t>::type type;
public:
    static const type value = Binomial<N - 1, K - 1>::value +
                              Binomial<N - 1, K    >::value;
    };

template <int64_t N>
class Binomial<N, N>
    {
public:
    static const typename std::enable_if<(N >= 0), int64_t>::type value = 1;
    };

template <int64_t N>
class Binomial<N, 0>
    {
public:
    static const typename std::enable_if<(N >= 0), int64_t>::type value = 1;
    };

template <>
class Binomial<0, 0>
    {
public:
    static const int64_t value = 1;
    };

int main()
    {
    std::cout << Binomial<50, 25>::value << std::endl;
    std::cin.get();

    return 0;
    }