PKU 1306 Combinations

int main() {
	ll dp[128][128];
	memset(dp, 0, sizeof(dp));
	dp[0][0] = 1;

	for (int n = 1; n < 128; ++n) {
		for (int m = 0; m < 128; ++m) {
			if (m) {
				dp[n][m] += dp[n - 1][m - 1];
			}
			dp[n][m] += dp[n - 1][m];
		}
	}

	for (int N, M; cin >> N >> M && (N || M); ) {
		printf("%d things taken %d at a time is %lld exactly.\n", N, M, dp[N][M]);
	}
}