#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;
    for (int i1 = 0; i1 < n; i1++) {
        if (!used[i1]) {
            k++;
            used[i1] = k;
            int i = i1;
            for (int j = i + 1; 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 + 1][j - 1]) {
                        getans(i + 1, j - 1);
                    }
                    if (!ans[i + 1][j]) {
                        getans(i + 1, j);
                    }
                    if (ans[i + 1][j] != ans[i + 1][j - 1] + 1) {
                        continue;
                    }
                    if (!ans[i][j]) {
                        getans(i, j);
                    }
                    if (ans[i][j] == 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;
}
