#include <stdio.h>
// prototype
int lcm(int , int);
int ncr(int , int );
int lcm(int a, int b)
{
while (a % b) {
int t = a % b;
a = b;
b = t;
}
return b;
}
int ncr(int n, int r)
{
int a = 1, b = 1;
while (r) {
a *= n--;
b *= r--;
int t = lcm(a , b);
a /= t;
b /= t;
}
return a / b;
}
int calc1(int *a, int n, int r)
{
int sum = 0, j = 1;
for (int i = 0; i < r; ++i) {
for (; j < *a; ++j)sum += ncr(43 - j , r - 1 - i);
j = *a++ + 1;
}
sum += ncr(0, 0);
return sum;
}
int calc2(int a, int n, int r)
{
int j = 1;
while (r > 0) {
int t = ncr(n - 1, r - 1);
if (t < a) {
a -= t;
++j;
--n;
} else {
--n;
++j;
--r;
}
}
return 0;
}
int main(int argc, char const *argv[])
{
int n, r, a[100], i;
FILE *fpi;
sscanf(argv
[1], "%d,%d", &n
, &r
); if (argv[2][0] == 'r') {
fpi
= fopen(argv
[3], "r"); i = 0;
while (fscanf(fpi
, "%d,", a
+ i
) != EOF
) { if (++i == r) {
calc1(a, n, r);
i = 0;
}
}
} else {
fpi
= fopen(argv
[3], "r"); while (fscanf(fpi
, "%d", a
) != EOF
) { calc2(*a, n, r);
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Ci8vIHByb3RvdHlwZQppbnQgbGNtKGludCAsIGludCk7CmludCBuY3IoaW50ICwgaW50ICk7CgppbnQgbGNtKGludCBhLCBpbnQgYikKewogIHdoaWxlIChhICUgYikgewogICAgaW50IHQgPSBhICUgYjsKICAgIGEgPSBiOwogICAgYiA9IHQ7CiAgfQogIHJldHVybiBiOwp9CgppbnQgbmNyKGludCBuLCBpbnQgcikKewogIGludCBhID0gMSwgYiA9IDE7CiAgd2hpbGUgKHIpIHsKICAgIGEgKj0gbi0tOwogICAgYiAqPSByLS07CiAgICBpbnQgdCA9IGxjbShhICwgYik7CiAgICBhIC89IHQ7CiAgICBiIC89IHQ7CiAgfQogIHJldHVybiBhIC8gYjsKfQoKaW50IGNhbGMxKGludCAqYSwgaW50IG4sIGludCByKQp7CiAgaW50IHN1bSA9IDAsIGogPSAxOwogIGZvciAoaW50IGkgPSAwOyBpIDwgcjsgKytpKSB7CiAgICBmb3IgKDsgaiA8ICphOyArK2opc3VtICs9IG5jcig0MyAtIGogLCByIC0gMSAtIGkpOwogICAgaiA9ICphKysgKyAxOwogIH0KICBzdW0gKz0gbmNyKDAsIDApOwogIHByaW50ZigiJWRcbiIsIHN1bSk7CiAgcmV0dXJuIHN1bTsKfQoKaW50IGNhbGMyKGludCBhLCBpbnQgbiwgaW50IHIpCnsKICBwcmludGYoIlxuJWRcdCIsIGEpOwogIGludCBqID0gMTsKICB3aGlsZSAociA+IDApIHsKICAgIGludCB0ID0gbmNyKG4gLSAxLCByIC0gMSk7CiAgICBpZiAodCA8IGEpIHsKICAgICAgYSAtPSB0OwogICAgICArK2o7CiAgICAgIC0tbjsKICAgIH0gZWxzZSB7CiAgICAgIHByaW50ZigiJWQsIiwgaik7CiAgICAgIC0tbjsKICAgICAgKytqOwogICAgICAtLXI7CiAgICB9CiAgfQogIHJldHVybiAwOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciBjb25zdCAqYXJndltdKQp7CiAgaW50IG4sIHIsIGFbMTAwXSwgaTsKICBGSUxFICpmcGk7CiAgc3NjYW5mKGFyZ3ZbMV0sICIlZCwlZCIsICZuLCAmcik7CiAgaWYgKGFyZ3ZbMl1bMF0gPT0gJ3InKSB7CiAgICBmcGkgPSBmb3Blbihhcmd2WzNdLCAiciIpOwogICAgaSA9IDA7CiAgICB3aGlsZSAoZnNjYW5mKGZwaSwgIiVkLCIsIGEgKyBpKSAhPSBFT0YpIHsKICAgICAgaWYgKCsraSA9PSByKSB7CiAgICAgICAgY2FsYzEoYSwgbiwgcik7CiAgICAgICAgaSA9IDA7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgewogICAgZnBpID0gZm9wZW4oYXJndlszXSwgInIiKTsKICAgIHdoaWxlIChmc2NhbmYoZnBpLCAiJWQiLCBhKSAhPSBFT0YpIHsKICAgICAgY2FsYzIoKmEsIG4sIHIpOwogICAgfQogIH0KICByZXR1cm4gMDsKfQo=