#include <iostream>

using namespace std;

int nu[3010];
int res[3010][3010];
int re(int a,int b)
{
    if (res[a][b]>0){return res[a][b];}
    if (a==b){return 1;}
    cout << "?" << ' ' << a << ' ' << b << endl;
    cout.flush();
    int d;
    cin >> d;
    res[a][b]=d;
    return d;
}
//bool good[310][310];

int main()
{
    //freopen("video.in","r",stdin);
    //freopen("video.out","w",stdout);
    int n;
    cin >> n;
    cout << "? 1 " << n << endl;
    cout.flush();
    int k;
    cin >> k;
    if (k==1){cout << "Ready!" << endl << k << endl;for (int i=1;i<=n;i++){cout << 1 << ' ';}return 0;}
    if (k==n){cout << "Ready!" << endl << k << endl;for (int i=1;i<=n;i++){cout << i << ' ';}return 0;}
    if (n<=3000)
    {
        res[1][n]=k;
        nu[1]=1;
       // int i=2;
       int now=1;
        for (int i=2;i<=n;i++)
        {
            if (re(1,i)>now){now++;nu[i]=now;}else
            {
                if (re(i-1,i)==1){nu[i]=nu[i-1];continue;}
                int l=1;
                int r=i-1;
                while(1)
                {
                    int m=(l+r)/2;
                    int a1=re(m,i);
                    int a2=re(m+1,i);
                    int a3=re(m,i-1);
                    int a4=re(m+1,i-1);
                    if (a1==a2&&a1==a3&&a1==a4+1){nu[i]=nu[m];break;}
                    if (a1==a3+1){r=m;}
                    else{l=m;}

                }
            }
        }

        cout << "Ready!" << endl << k << endl;
        for (int i=1;i<=n;i++){cout << nu[i] << ' ';}return 0;
    }

    return 0;
}
