@Test
	/**
	 * take takeN cards from a deck of cards and make up to totalNum
	 */
	public void testNumComb2() {
		int suit = 4;
		int rank = 13;
		int totalNum = 36;
		int takeN = 5;

		List<Integer> numList = new ArrayList<Integer>();
		for (int i = 1; i <= rank; i++) {
			for (int j = 0; j < suit; j++) {
				numList.add(i);
			}
		}

		int combN = takeN - 1;
		Combination<Integer> comb = new CombinationImpl<Integer>(numList, combN);
		for (List<Integer> cb : comb) {
			// System.out.println(StringUtils.join(cb.toArray(), ", "));
			int sum = 0;
			for (Integer num : cb) {
				sum += num;
			}
			int lastNum = totalNum - sum;
			int tk1 = cb.get(combN - 1);

			// valid check of the calculated number
			if (lastNum > rank || lastNum < tk1) {
				continue;
			}
			// - validating. special handling the case of equal
			if (lastNum == tk1 && combN >= suit && tk1 == cb.get(combN - suit)) {
				continue;
			}

			System.out.print(StringUtils.join(cb.toArray(), ", "));
			System.out.println(", " + lastNum);
		}
	}