boolean dfs(char[][]b, boolean[][][]used, int i, int j) {
		if (i==b.length)return true;
		if (j==b.length)return dfs(b, used, i+1, 0);
		if (b[i][j]!='.') return dfs(b, used, i, j+1);
		for (int c=0;c<9;++c) {
			if (used[0][i][c]||used[1][j][c]||used[2][i/3*3+j/3][c]) continue;
			b[i][j]=(char)('1'+c);
			fill(b, used, i, j, true);
			if (dfs(b, used, i,j)) return true;
			fill(b, used, i, j, false);
			b[i][j]='.';
		}
		return false;
	}