#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x) {
  bool b = 0;
  char c;
  while (!isdigit(c = getchar()) && c != '-')
    ;
  if (c == '-') c = getchar(), b = 1;
  x = c - 48;
  while (isdigit(c = getchar())) x = (x << 3) + (x << 1) + c - 48;
  if (b) x = -x;
}
template <typename T>
inline void wrip(T x) {
  if (x > 9) wrip(x / 10);
  putchar(x % 10 + 48);
}
template <typename T>
inline void write(T x) {
  if (x < 0) putchar('-'), x = -x;
  wrip(x);
  putchar(' ');
}
template <typename T>
inline void writeln(T x) {
  if (x < 0) putchar('-'), x = -x;
  wrip(x);
  putchar('\n');
}
inline char readch() {
  char c;
  do c = getchar();
  while (c == '\n');
  return c;
}
inline void reads(string &s) {
  char c;
  s = "";
  do c = getchar();
  while (c == ' ' || c == '\n');
  do {
    s += c;
    c = getchar();
  } while (c != ' ' && c != '\n');
}
const long double pi = acos(-1);
const int inf = 1e9, mod = 1e9 + 7, N = 1e6 + 11;
int n, tp, num[2], pos[2];
int Dif(vector<int> s) {
  cout << "? ";
  for (auto x : s) cout << x;
  cout << '\n';
  fflush(stdout);
  cin >> s[0];
  return s[0];
}
int Ask(int f, int tp) {
  vector<int> s;
  for (int i = 1; i <= f; i++) s.push_back(tp);
  for (int i = f + 1; i <= n; i++) s.push_back(1 - tp);
  return Dif(s);
}
int main() {
  read(n);
  num[0] = Ask(0, 0);
  num[1] = n - num[0];
  if (n - Ask(1, 1) - 1 == num[0]) tp = 1;
  pos[tp] = 1;
  int l = 2, r = n;
  while (l <= r) {
    int mid = l + r >> 1;
    if (n - Ask(mid, tp) - mid == num[1 - tp])
      l = mid + 1;
    else
      r = mid - 1;
  }
  pos[1 - tp] = l;
  cout << "! " << pos[0] << ' ' << pos[1];
}
