import static java.math.BigInteger.*; import java.math.*; import java.util.*; class Main{ static boolean end(BigInteger r){ var g=r.gcd(n); if(g.equals(n)||g.equals(ONE)) return false; System.out.println("! "+g+" "+n.divide(g)); return true; } static BigInteger n; public static void main(String[]$){ var s=new Scanner(System.in); n=s.nextBigInteger(); for(int i=2;!end(valueOf(i));++i){ System.out.println("? "+i); var r=s.nextBigInteger().divideAndRemainder(TWO); if(r[1].equals(ZERO)){ var R=valueOf(i).modPow(r[0],n); if(end(R.add(ONE))||end(R.subtract(ONE))) break; } } } }