package main import ( "bufio" "fmt" "os" ) func main() { r := bufio.NewReader(os.Stdin) w := bufio.NewWriter(os.Stdout) defer w.Flush() var N int fmt.Fscan(r, &N) p := make([]int, N-1) for i := 0; i < N-1; i++ { fmt.Fprintf(w, "? %d %d\n", i, N-1) w.Flush() var x int fmt.Fscan(r, &x) if x < 0 { return } p[i] = x } var cand []int for L := 1; L <= 9; L++ { ok := true for i := 0; i < N-1; i++ { if p[i]%L != 0 { ok = false break } di := p[i] / L if di < 0 || di > 9 { ok = false break } } if ok { cand = append(cand, L) } } if len(cand) == 0 { fmt.Fprintf(w, "! -1\n") return } if len(cand) > 1 && N > 2 { fmt.Fprintf(w, "? 0 1\n") w.Flush() var p01 int fmt.Fscan(r, &p01) if p01 < 0 { return } var nc []int for _, L := range cand { if p[0]%L != 0 || p[1]%L != 0 { continue } d0 := p[0] / L d1 := p[1] / L if d0*d1 == p01 { nc = append(nc, L) } } cand = nc } if len(cand) != 1 { fmt.Fprintf(w, "! -1\n") return } L := cand[0] d := make([]int, N) d[N-1] = L for i := 0; i < N-1; i++ { d[i] = p[i] / L } ans := 0 for i := N - 1; i >= 0; i-- { ans = ans*10 + d[i] } fmt.Fprintf(w, "! %d\n", ans) }