public Sudoku(int[][] ints) {
		// YOUR CODE HERE
		grid = new int[ints.length][];
		spots = new ArrayList<Spot>();
		squares = new ArrayList<HashSet<Integer>>(SIZE);
		for (int i = 0; i < SIZE; i++)
			squares.add(new HashSet<Integer>());
		solutionList = new ArrayList<String>();
		for (int i = 0; i < ints.length; i++) {
			grid[i] = Arrays.copyOf(ints[i], ints[i].length);
			for (int j = 0; j < ints[i].length; j++) {
				int squareIndex = (i / PART) * PART  + j / PART;
				if (ints[i][j] == 0) {
					// new empty spot.
					spots.add(new Spot(i, j));
				} else {
					squares.get(squareIndex).add(new Integer(ints[i][j]));
				}
			}

		}
		Collections.sort(spots);
		startTime = System.currentTimeMillis();
	}