////////////////////////////////////////////////////////
//2^x mod n = 1
//给出n,算出最小的x满足2^x mod n = 1
//思路:高精度,需要不断地缩小数据的规模。首先,n=1和n=2的倍数时不存在x,
// 其次,每次把2^k nod n的余数乘2,得到是原(2^k)*2的余数,即2^(k+1)
// 的余数。
#include<iostream>
using namespace std;
int main()
{
long temp,n,count;
while(cin>>n)
{
if(n==1 || n%2==0)
cout<<"2^? mod "<<n<<" = 1"<<endl;
else
{
count=1;
temp=2;
while(temp!=1)
{
temp*=2;
count++;
temp%=n;
}
cout<<"2^"<<count<<" mod "<<n<<" = 1"<<endl;
}
}
return 0;
}