package no282; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Queue; import java.util.Scanner; public class Main { static int[][] compare; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); compare = new int[n][n]; Queue check = new ArrayDeque<>(); for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { check.add(i * 1000 + j); } } while(!check.isEmpty()) { ArrayList query = new ArrayList<>(); boolean[] used = new boolean[n]; int s = check.size(); int checked = 0; while(checked < s && query.size() < n) { checked++; int x = check.poll(); int a = x / 1000 - 1; int b = x % 1000 - 1; if (used[a] || used[b]) { check.offer(x); continue; } query.add(x); used[a] = used[b] = true; } while(query.size() < n) { query.add(0); } StringBuilder sb = new StringBuilder(); sb.append('?'); for(int i=0;i' ? 1 : 0; compare[b][a] = -compare[a][b]; } } // System.out.println(Arrays.deepToString(compare)); Integer[] ans = new Integer[n]; for (int i = 0; i < n; i++) { ans[i] = i; } Arrays.sort(ans, (x, y) -> compare[x][y]); StringBuilder sb = new StringBuilder(); sb.append('!'); for (int i = 0; i < n; i++) { sb.append(' '); sb.append(ans[i] + 1); } System.out.println(sb.toString()); } }