$n=<>; if(!fork){ for$v(2..$n*($n-1)){ print "? $v 1\n"; } exit; } for$v(2..$n*($n-1)){ $_=<>; ($a,$b)=split; $k=($a+$n)*($n*2)+($b+$n); push @$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){ $na=1; $nb=$n; }else{ $na=$n; $nb=1; } if(!fork){ for$k(0..$n*$n*4-1){ ($v0,$v1)=@$k; if($v1){ print "? $c $v0\n"; } } exit; } sub mkn{ ($_[0]-$amin)*$na+($_[1]-$bmin)*$nb+$n; } $z[0]=mkn(0,0); for$k(0..$n*$n*4-1){ ($v0,$v1)=@$k; if($v0){ $a=int($k/($n*2))-$n; $b=$k%($n*2)-$n; if($v1){ $_=<>; ($a1,$b1)=split; if($b1-$a1>$bmax-$amin){ ($v0,$v1)=($v1,$v0); } $z[$v1-1]=mkn($b,$a); } $z[$v0-1]=mkn($a,$b); } } print "! @z\n";