#include <bits/stdc++.h>
using namespace std;
const int di[] = {-1, 0, 1, 0};
const int dj[] = {0, 1, 0, -1};
const long long MOD = 1e9 + 7;
const long long INF = 1e9;
const double EPS = 1e-5;
int n;
int p0 = -1, p1 = -1;
unordered_map<string, int> mem;
inline int ask(string s) {
  if (mem.find(s) != mem.end()) return mem[s];
  cout << "? " << s << endl;
  int x;
  cin >> x;
  return mem[s] = x;
}
void firstBit() {
  if (ask("1" + string(n - 1, '0')) < ask("0" + string(n - 1, '0')))
    p1 = 1;
  else
    p0 = 1;
}
inline string cut(int mid, int b, char c) {
  return string(mid, '0') + string(b - mid + 1, c) + string(n - b - 1, '0');
}
inline bool anyone(int mid, int a, int b) {
  int x = ask(cut(mid, b, '0')), y = ask(cut(mid, b, '1'));
  return y - x < b - mid + 1;
}
inline bool anyzero(int mid, int a, int b) {
  int x = ask(cut(mid, b, '0')), y = ask(cut(mid, b, '1'));
  return x - y < b - mid + 1;
}
void bs1() {
  int a = 1, b = n - 1, mid = (a + b + 1) / 2;
  while (a < b) {
    if (anyone(mid, a, b))
      a = mid;
    else
      b = mid - 1;
    mid = (a + b + 1) / 2;
  }
  p1 = mid + 1;
}
void bs0() {
  int a = 1, b = n - 1, mid = (a + b + 1) / 2;
  while (a < b) {
    if (anyzero(mid, a, b))
      a = mid;
    else
      b = mid - 1;
    mid = (a + b + 1) / 2;
  }
  p0 = mid + 1;
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  cin >> n;
  firstBit();
  if (p0 == -1)
    bs0();
  else if (p1 == -1)
    bs1();
  cout << "! " << p0 << " " << p1 << endl;
  cin.ignore(), cin.get();
}
