#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<bitset>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 1e9
#define pii pair<int,int>
using namespace std;
typedef long long ll;
inline int rd(){char c=getchar();int tot=1;while ((c<'0'|| c>'9')&&c!='-') c=getchar();if (c=='-'){tot=-1;c=getchar();}
ll sum=0;while (c>='0'&&c<='9'){sum=sum*10+c-'0';c=getchar();}return sum*tot;}
const int N=1e5+10;
map<ll,int>mp;
ll exbsgs(ll a,ll b,ll p){
a%=p,b%=p;
mp.clear();
ll a1=1,nm=0,g=__gcd(a,p);
// printf("%d=%d mod %d %d %d\n",a,b,p,a1,nm);
while(g!=1){
a1=a1*a/g%p;
if(b%g!=0)return inf;
b/=g;p=p/g;
g=__gcd(a,p);
nm++;
}
ll up=sqrt(p);
for(ll i=0,j=b%p;i<up;i++,j=j*a%p){
mp[j]=i;
}
ll k=a1,Min=inf;
for(ll i=1;i<=up;i++,k=k*a%p);
for(ll i=1,j=k;i<=up;i++,j=j*k%p){
if(mp.find(j)!=mp.end()){
Min=min(Min,1ll*up*i-mp[j]);
}
}
return Min==inf?inf:nm+Min;
}
int main(){
ll a,b,p;
while((a=rd())+(p=rd())+(b=rd())!=0){
int res=exbsgs(a,b,p);
if(res>=inf)puts("No Solution");
else printf("%d\n",res);
}
return 0;
}
/*
2 4 0
0 0 0
###### */
错误数据 27098245 633810670 415037555 正确输出50317120