$|=1; $n=<>; for$v(2..$n*($n-1)){ print "? $v 1\n"; $k=<>; ($a,$b)=glob$k; push @{$h{$k}},$v; $amin=$a if $amin>$a; $amax=$a if $amax<$a; $bmin=$b if $bmin>$b; $bmax=$b if $bmax<$b; $c=$v if $a==$amin && $b==$bmax; } if($amax-$amin>$bmax-$bmin){ # (a,b)=(lo,hi) $z[0]=(0-$amin)+$n*(0-$bmin)+$n; for$k(keys(%h)){ ($a,$b)=glob$k; if(@{$h{$k}}==2){ ($v0,$v1)=@{$h{$k}}; print "? $c $v0\n"; ($a1,$b1)=glob<>; if($b1-$a1>$bmax-$amin){ $z[$v0-1]=($b-$amin)+$n*($a-$bmin)+$n; $z[$v1-1]=($a-$amin)+$n*($b-$bmin)+$n; }else{ $z[$v0-1]=($a-$amin)+$n*($b-$bmin)+$n; $z[$v1-1]=($b-$amin)+$n*($a-$bmin)+$n; } }else{ $v=${$h{$k}}[0]; $z[$v-1]=($a-$amin)+$n*($b-$bmin)+$n; } } }else{ # (a,b)=(hi,lo) $z[0]=(0-$bmin)+$n*(0-$amin)+$n; for$k(keys(%h)){ ($a,$b)=glob$k; if(@{$h{$k}}==2){ $v0=${$h{$k}}[0]; $v1=${$h{$k}}[1]; print "? $c $v0\n"; ($a1,$b1)=glob<>; if($b1-$a1>$bmax-$amin){ $z[$v0-1]=($a-$bmin)+$n*($b-$amin)+$n; $z[$v1-1]=($b-$bmin)+$n*($a-$amin)+$n; }else{ $z[$v0-1]=($b-$bmin)+$n*($a-$amin)+$n; $z[$v1-1]=($a-$bmin)+$n*($b-$amin)+$n; } }else{ $v=${$h{$k}}[0]; $z[$v-1]=($b-$bmin)+$n*($a-$amin)+$n; } } } print "! @z\n";