1 #include <iostream>
   2 #include <sstream>
   3 #include <string>
   4 #include <algorithm>
   5 #include <vector>
   6 using namespace std;
   7 
   8 #define GI ({int _t; scanf("%d", &_t); _t;})
   9 #define FOR(i, a, b) for (int i=a; i<b; i++)
  10 #define REP(i, a) FOR(i, 0, a)
  11 template<class T> string toString(T n){ostringstream ost;ost<<n;ost.flush();return ost.str();}
  12 int toInt(string s){int r=0;istringstream sin(s);sin>>r;return r;}
  13 #define DBGV(_v) { REP(_i, _v.size()) { cout << _v[_i] << "\t";} cout << endl;}
  14 
  15 double nCr(int n, int r) {
  16 	if (r ==0) return 1;
  17 	int k = min(r, n-r);
  18 	double num = 1;
  19 	for (int i=k; i >= 1 ; i--) {
  20 		num *= (n-i+1);
  21 		num /= i;
  22 	}
  23 	return (num);
  24 }
  25 
  26 int main() {
  27 	int n, r;
  28 	while (1) {
  29 		n = GI; r = GI;
  30 		if (n==0 && r==0) break;
  31 		double res = nCr(n, r);
  32 		printf("%d things taken %d at a time is %.0lf exactly.\n", n, r, res);
  33 	}
  34 	return 0;
  35 }