import java.io.*;
import java.util.*;

public class b1 {

	static int a[];
	static int prev[];
	static boolean used[];
	
	static void get(int l, int r, int cnt) throws IOException{
		if (l + 1 == r){
			return;
		}
		
		int mid = (l + r) / 2;
		int countl = count(l, mid - 1);
		int countr = count(mid, r - 1);
		
		get(l, mid, countl);
		get(mid, r, countr);
		
		int last = countl;
		
		for (int i = mid; i < r; i++) {
			int c = count(l, i);
			
			if (c != last) {
				a[i] += countl;
			} 
			else{
				
			}
			
			last = c;
		}
	}

	static int count(int l, int r) throws IOException {
		System.out.println("? " + (l + 1) + " " + (r + 1));
		return nextInt();
	}

	public void solve() throws IOException {
		int n = nextInt();

		a = new int[n];
		prev = new int[n];
		used = new boolean[n];
		
		/*
		get(0, n, k);
		*/
		
		int last = 1;
		
		for (int i = 1; i < n; i++) {
			int cnt = count(0, i);
			
			if (cnt != last){
				a[i] = last;
			}
			else{
				int cur = 1;
				Arrays.fill(used, false);
				
				for (int j = i - 1; j > -1; j--) {
					int ct = count(j, i);
					
					if (ct == cur && !used[a[j]]){
						a[i] = a[j];
						break;
					}
					
					used[a[j]] = true;
					cur = ct;
				}
				
			}
			
			last = cnt;
		}
		
		System.out.println("Ready!");
		
		System.out.println(last);
		
		for (int i = 0; i < n; i++) {
			System.out.print((a[i] + 1) + " ");
		}
		System.out.println();

	}

	public void run() {
		try {
			br = new BufferedReader(new InputStreamReader(System.in));
			out = new PrintWriter(System.out);

			solve();

			out.close();
		} catch (IOException e) {
			e.printStackTrace();
			System.exit(1);
		}
	}

	static BufferedReader br;
	static StringTokenizer in;
	PrintWriter out;

	public static String nextToken() throws IOException {
		while (in == null || !in.hasMoreTokens()) {
			in = new StringTokenizer(br.readLine());
		}
		return in.nextToken();
	}

	public static int nextInt() throws IOException {
		return Integer.parseInt(nextToken());
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(nextToken());
	}

	public long nextLong() throws IOException {
		return Long.parseLong(nextToken());
	}

	public static void main(String[] args) throws IOException {
		Locale.setDefault(Locale.US);
		new b1().run();
	}

}