#define fname "video"

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>

#include <vector>
#include <map>



#define forn(i, n) for (int i = 0; i < n; i ++)
#define fornn(i, m, n) for (int i = m; i < n; i ++)

#define inb push_back
#define mk make_pair
#define X first
#define Y second

using namespace std;

vector<pair<int, int> > qwe;

int n;

map<pair<int, int>, int> asd;

int check(int l, int r) {
	if (asd.count(mk(l, r)))
		return asd[mk(l, r)];
	cout << "? " << l + 1 << ' ' << r + 1 << endl;
	int x;
	cin >> x;
	return asd[mk(l, r)] = x;
}

void init() {
	int ind = 0;
	while (ind < n) {
		int st = 1;
		int r = ind;
		int border = n;
		while (1) {
			int now;
			if (r + st >= border) {
				now = 2;
			}
			else
				now = check(ind, r + st);
			
			if (now != 1) {
				if (st == 1)
					break;
				border = min(border, r + st);
				r += st / 2;
				st = 1;
			}
			else
				st *= 2;
		}
		qwe.inb(mk(ind, r));
		ind = r + 1;
	}
}

int main() {
#ifdef _DEBUG
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
#else
	//freopen(fname".in", "r", stdin);
//	freopen(fname".out", "w", stdout);
#endif
	cin >> n;
	if (n == 1) {
		cout << "Ready!" << endl;
		cout << 1 << endl;
		cout << 1 << endl;
		exit(0);
	}
	init();
	cout << "Ready!" << endl;
	cout << 2 << endl;
	forn(i, qwe.size()){
		fornn(j, qwe[i].X, qwe[i].Y + 1)
			cout << (i % 2) + 1 << ' ';
	}
	cout << endl;
	return 0;
}