public boolean hasEqualUnique(int... values) {
		if (values.length > diceNumber)
			return false; // impossible when we use more dice
		
		List<Integer> inDiceSet = new ArrayList<Integer>();
		List<Integer> requiredNumbers = new ArrayList<Integer>();

		for (int i = 0; i < values.length; i++)
			requiredNumbers.add(values[i]);
		for (int pipsNr = Dice.MIN_VALUE; pipsNr <= Dice.MAX_VALUE; pipsNr++)
			if (diceSet.contains(Dice.valueOf(pipsNr))) inDiceSet.add(pipsNr);

		Collections.sort(requiredNumbers);
		Collections.reverse(requiredNumbers); // descending order

		for (Iterator<Integer> iterator = requiredNumbers.iterator(); iterator.hasNext();) {
			Integer count = iterator.next();
			for (Iterator<Integer> iterator2 = inDiceSet.iterator(); iterator2.hasNext();) {
				Integer i = iterator2.next();
				if (count(i) >= count) {
					iterator2.remove();
					iterator.remove();
					break;
				}
			}
		}

		return requiredNumbers.size() == 0;
	}