/// Data type used by combinatorics functions typedef unsigned long long int largeint; // Function prototypes or function declarations: /// Returns the number of combinations of r elements that can be made out of n elements largeint combinations(largeint n, largeint r); /// Returns n! largeint factorial(largeint n); /// Evaluates as the min value between a and b #define min(a, b) ((a) < (b) ? (a) : (b)) /// Evaluates as the max value between a and b #define max(a, b) ((a) > (b) ? (a) : (b))