void buildSudoku(char[][] board, ArrayList<BlankSpot> candidates, int lvl,
			int size) {
		if (finish)
			return;
		if (lvl == size) {
			finish = true;
			return;
		} else {
			BlankSpot curBs = candidates.get(lvl);
			int i = curBs.i;
			int j = curBs.j;
			for (int val = 1; val <= 9; val++) {
				if (checkVertial(val, i, j) && checkHorizontal(val, i, j)
						&& checkSquere(val, i, j)) {
					insertVertical(val, i, j);
					insertHorizontal(val, i, j);
					insertSquare(val, i, j);
					board[i][j] = (char) (val + '0');
					buildSudoku(board, candidates, lvl + 1, size);
					if (!finish) {
						removeVertical(val, i, j);
						removeHorizontal(val, i, j);
						removeSquare(val, i, j);
						board[i][j] = '.';
					} else {
						return;
					}
				}
			}

		}
	}