模板题
#include<map>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int k,n,m,p;
int x,z,s,cnt,d;
bool f;
map<int,int>M;
int Gcd(int x,int y){
return !y?x:Gcd(y,x%y);
}
inline int ex_bsgs(int a,int b,int p){
if(b==1)return 0;
int s=ceil(sqrt(p)),cnt=0,d=1;
while(1){
int g=Gcd(a,p);
if(g==1)break;
if(b%g)return -1;
b/=g;p/=g;d=1ll*d*(a/g)%p;cnt++;
if(b==d)return cnt;
}
M.clear();
int t=b;
for(int i=0;i<=s;i++,t=1ll*t*a%p)M[t]=i;
t=a;
for(int i=1;i<s;i++)t=1ll*t*a%p;
int Res=d;
for(int i=1;i<=s;i++){
Res=1ll*Res*t%p;
if(M.count(Res))return i*s-M[Res]+cnt;
}
return -1;
}
int main(){
while(1){
scanf("%d%d%d",&x,&z,&k);
if(!x&&!z&&!k)break;
int t=ex_bsgs(x,k,z);
if(t==-1)puts("No Solution");else printf("%d\n",t);
}
return 0;
}