#include <bits/stdc++.h>

using namespace std;

int p[3000];

int q[3000][3000];

int get(int);

void unite(int a, int b) {
    if(get(a) != get(b)) {
        p[b] = get(a);
    }
}

int get(int a_) {
    int a = a_;
    while(p[a] != a)
        a = p[a];
    return p[a] = a;
}

int query(int l, int r) {
    if(q[l][r] != -1) return q[l][r];
    cout << "? " << l + 1 << ' ' << r + 1 << endl;
    cout.flush();
    int ret;
    cin >> ret;
    return q[l][r] = ret;
}

int main() {
    int n;
    cin >> n;
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            if(i == j) q[i][j] = 1;
            else q[i][j] = -1;
        }
    }
    for(int i = 0; i < n; i++) {
        p[i] = i;
    }

    for(int i = 0; i < n; i++) {
        if(i + 1 < n) {
            if(query(i, i + 1) == 1) unite(i, i + 1);
        }
        for(int j = i + 2; j < n; j++) {
            int q1 = query(i, j - 1);
            int q2 = query(i + 1, j);
            if(q1 == q2) unite(i, j);
        }
    }
    int k = 0;
    bool doun[3000];
    int mapp[3000];
    for(int i = 0; i < n; i++) mapp[i] = -1;
    int cur = 1;
    fill(doun, doun + 3000, false);
    for(int i = 0; i < n; i++) doun[get(i)] = true;
    for(int i = 0; i < n; i++) if(doun[i]) k++;
    for(int i = 0; i < n; i++) {
        if(mapp[get(i)] == -1) { mapp[get(i)] = cur; cur++; }
    }
    cout << "Ready!" << endl << k << endl;
    cout << mapp[get(0)];
    for(int i = 1; i < n; i++)
        cout << ' ' << mapp[get(i)];
    cout << endl;
    return 0;
}
