package main
import (
"fmt"
)
func main() {
var n int
fmt.Scan(&n)
query := func(L, R int) int {
s := make([]byte, n)
for i := 0; i < n; i++ {
s[i] = '0'
}
for i := L - 1; i <= R - 1; i++ {
s[i] = '1'
}
fmt.Println(string(s))
var dist int
fmt.Scan(&dist)
return dist
}
D := query(0, -1)
var pos0, pos1 int
var search func(L, R int)
var find1 func(L, R int)
var find0 func(L, R int)
find1 = func(L, R int) {
if L == R {
pos1 = L
return
}
mid := (L + R) / 2
K := mid - L + 1
dist := query(L, mid)
x := (D + K - dist) / 2
if x > 0 {
find1(L, mid)
} else {
find1(mid+1, R)
}
}
find0 = func(L, R int) {
if L == R {
pos0 = L
return
}
mid := (L + R) / 2
K := mid - L + 1
dist := query(L, mid)
x := (D + K - dist) / 2
if x < K {
find0(L, mid)
} else {
find0(mid+1, R)
}
}
search = func(L, R int) {
mid := (L + R) / 2
K := mid - L + 1
dist := query(L, mid)
x := (D + K - dist) / 2
if x == 0 {
pos0 = L
find1(mid+1, R)
} else if x == K {
pos1 = L
find0(mid+1, R)
} else {
search(L, mid)
}
}
search(1, n)
fmt.Printf("! %d %d\n", pos0, pos1)
}