← Home
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)
}