private static FinalCard combination(int[] arr, int n, int start, int selected, 
			int[] result, ArrayList<Card> avaList) {
		if (n == 0) {
			ArrayList<Card> selectedCard = new ArrayList<Card>();
			
			for ( int i = 0; i < 5; i++ ) {
				selectedCard.add( avaList.get(result[i]) );
			}
			
			Collections.sort(selectedCard);
			
			return checkEffCardType(selectedCard);
		}
		
		FinalCard biggest = new FinalCard(LOWEST_EFF_CARD, FinalCardType.HICH_CARD);
		FinalCard tmp = null;
		
		for ( int i = start; i <= arr.length - n; i++ ) {
			result[selected] = arr[i];
			tmp = combination(arr, n - 1, i + 1, selected + 1, result, avaList);
			if (tmp.compareTo(biggest) > 0) {
				biggest = tmp;
			}
		}

		return biggest;
	}