private boolean fit(int index, int value) { // does this value fit into this index without breaking the rules? If so, put it in
		int row = Util.getRow(index);
		int col = Util.getCol(index);
		int[] block_holder = Util.getBlock(row, col);
		int x = block_holder[0];
		int y = block_holder[1];
		
		// Find which numbers are missing per row/col/block
		ArrayList<Integer> missingRow = missingNumbersRow(row);
		ArrayList<Integer> missingCol = missingNumbersCol(col);
		ArrayList<Integer> missingBlock = missingNumbersBlock(x, y);

		// Find numbers that are missing in all three
		ArrayList<Integer> options = new ArrayList<Integer>();
		for (Integer i : missingRow) {
			if (missingCol.contains(i) && missingBlock.contains(i)) {
				options.add(i);
			}
		}
		
		// Check if our number is missing in all three 
		if (options.contains(value)) {
			sudoku.set(index, value);
			return true;
		}
		return false;
	}