N = gets.to_i omori = [*1..N] R = Array.new(N + 1) { Array.new(N + 1, 0) } def send_query(stack) query = Array.new(2 * N, 0) stack.each_with_index do |(i, j), idx| break if idx >= N query[2 * idx] = i query[2 * idx + 1] = j end STDOUT.puts("? #{query.join(' ')}") STDOUT.flush res = gets.chomp.split res.each_with_index do |r, idx| i, j = stack[idx] break if i.nil? if r == '<' R[i][j] = -1 R[j][i] = 1 else R[i][j] = 1 R[j][i] = -1 end end end loop do stack = [] omori.sort { |i, j| if R[i][j] == 0 stack << [i, j] -1 else R[i][j] end } break if stack.empty? send_query(stack) end omori.sort! { |i, j| R[i][j] } puts "! #{omori.join(' ')}"