private void doSearch(int index) {
		
		if (index > spots.size()-1) {
			// this is the last spot
			solutionCount++;
			solutionList.add(this.toString());
			return;
		}
		
		List<Integer> validNums = spots.get(index).validNumbers();
		if (validNums.size() == 0 && index != (spots.size()-1))
			// ends with no more valid number, backtrack
			return;

		for (Integer num : validNums) {
			spots.get(index).setValue(num);
			doSearch(index+1);
			spots.get(index).setValue(0);
			if (solutionCount >= MAX_SOLUTIONS)
				break;
		}
	}