import static java.math.BigInteger.*; import java.math.*; import java.util.*; class Main{ static boolean end(BigInteger r){ var gcd=r.gcd(n); if(gcd.equals(n)||gcd.equals(ONE)) return false; System.out.println("! "+gcd+" "+n.divide(gcd)); 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))) break; if(end(R.subtract(ONE))) break; } } } }