#include <bits/stdc++.h>
using namespace std;
int read() {
  int w = 0, f = 1;
  char c = ' ';
  while (c < '0' || c > '9') c = getchar(), f = c == '-' ? -1 : f;
  while (c >= '0' && c <= '9') w = w * 10 + c - 48, c = getchar();
  return w * f;
}
struct node {
  int x, f;
  node(int X, int F) { x = X, f = F; }
};
int n, a[200005];
node query(int l, int r) {
  printf("? %d %d\n", l, r);
  fflush(stdout);
  int x = read(), f = read();
  return node(x, f);
}
void solve(int l, int r) {
  if (l > r) return;
  node now = query(l, r);
  if (r - now.f + 1 <= l + now.f - 1) {
    for (int i = r - now.f + 1; i <= l + now.f - 1; i++) a[i] = now.x;
    solve(l, r - now.f);
    solve(l + now.f, r);
  } else {
    int mid = (l + r) >> 1;
    solve(l, mid);
    solve(mid + 1, r);
  }
}
signed main() {
  n = read();
  solve(1, n);
  printf("! ");
  for (int i = 1; i <= n; i++) printf("%d%c", a[i], i == n ? '\n' : ' ');
  fflush(stdout);
  return 0;
}
