#include <iostream>
#include <sstream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <unordered_map>


using namespace std;


int n;
int used[3001];
int ans[3001][3001];


void getans(int i, int j) {
    cout << '?' << ' ' << i + 1 << ' ' << j + 1 << endl;
    int a;
    cin >> a;
    ans[i][j] = a;
}

int main() {
    cin >> n;
    int k = 0;
    while (true) {
    vector<int> v;
    for (int i1 = 0; i1 < n; i1++) {
        if (!used[i1]) {
            v.push_back(i1);
        }
    }
    if (v.empty()) {
        break;
    }
    int i1 = v[rand() % (int)v.size()];
    k++;
    used[i1] = k;
    int i = i1;
    for (int j = i1; j >= 0; j--) {
        if (used[j]) {
            continue;
        }
        if (i - 1 == j) {
            if (!ans[j][i]) {
                getans(j, i);
            }
            if (ans[j][i] == 1) {
                used[j] = k;
                i = j;
            }
        } else {
            if (!ans[j][i]) {
                getans(j, i);
            }
            if (!ans[j][i - 1]) {
                getans(j, i - 1);
            }
            if (!ans[j + 1][i - 1]) {
                getans(j + 1, i - 1);
            }
            if (ans[j][i] == ans[j][i - 1] && ans[j + 1][i - 1] + 1 == ans[j][i - 1]) {
                i = j;
                used[j] = k;
            }
        }
    }
    for (int j = i1; j < n; j++) {
        if (used[j]) {
            continue;
        }
        if (i + 1 == j) {
            if (!ans[i][j]) {
                getans(i, j);
            }
            if (ans[i][j] == 1) {
                used[j] = k;
                i = j;
            }
        } else {
            if (!ans[i][j]) {
                getans(i, j);
            }
            if (!ans[i + 1][j]) {
                getans(i + 1, j);
            }
            if (!ans[i + 1][j - 1]) {
                getans(i + 1, j - 1);
            }
            if (ans[i][j] == ans[i + 1][j] && ans[i + 1][j - 1] + 1 == ans[i + 1][j]) {
                i = j;
                used[j] = k;
            }
        }
    }
    }
    cout << "Ready!" << endl;
        cout << k << endl;
    for (int i = 0; i < n; i++) {
        cout << used[i] << ' ';
    }
    cout << endl;
    return 0;
}
