1.


/**
* FWP, Ausgewählte Probleme aus dem ACM Programming Contest, WS09
* Problem: 369 - Combinations
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=5&page=show_problem&problem=305
*
* @author Dennis Wilfert
* @version 1.0, 12/09/2009
*
* Status : Accepted
* Runtime: 0.204
*/
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.StringTokenizer;

class Main {

public static void main(String[] args) throws IOException {

HashMap<Integer, BigInteger> map = new HashMap<Integer, BigInteger>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
PrintWriter writer = new PrintWriter(new BufferedOutputStream(System.out));
StringTokenizer token = new StringTokenizer(reader.readLine());
int N, M, k, l, i;
BigInteger denom;
BigInteger num;

// Nach dem kürzen kann der Nenner Maximal 50! sein, also alle Werte
// bis 50! vorberechnen und in einer map speichern.
denom = BigInteger.ONE;
map.put(0, denom);
for (i = 1; i <= 50; i++) {
denom = denom.multiply(BigInteger.valueOf(i));
map.put(i, denom);
}

// Werte einlesen
N = Integer.parseInt(token.nextToken());
M = Integer.parseInt(token.nextToken());

while (N != 0) {

// Schauen ob die Differenz zwischen N und M größer als M ist
// der größere Wert wird in k gespeichert, der kleinere in l
if (M > N - M) {
k = M;
l = N - M;
} else {
k = N - M;
l = M;
}
// N muss nach dem kürzen nur mit allen Werten von k bis N multipliziert werden
num = BigInteger.ONE;
for (i = N; i > k; i--) {
num = num.multiply(BigInteger.valueOf(i));
}

// Im Nenner muss nur l! berechnet werden
num = num.divide(map.get(l));

// Formatiert ausgeben
writer.println( N + " things taken " + M + " at a time is " + num.toString() + " exactly.");

token = new StringTokenizer(reader.readLine());
N = Integer.parseInt(token.nextToken());
M = Integer.parseInt(token.nextToken());
}
writer.flush();
}
}