#include<bits/stdc++.h>
#define int long long
using namespace std;
map<int,int> s;
int a,p,b;
inline int read()
{
register int x=0,y=1;
register char c=std::getchar();
while(c<'0'||c>'9'){
if(c=='-'){
y=0;
}
c=std::getchar();
}
while(c>='0'&&c<='9'){
x=x*10+(c^48);
c=std::getchar();
}
return y?x:-x;
}
inline int gcd(int a,int b){
return b? gcd(b,a%b):a;
}
inline void ex(int a,int b,int &x,int &y){
if(b==0){
x=1;
y=0;
return;
}
ex(b,a%b,x,y);
int mid=x;
x=y;
y=mid-a/b*y;
}
inline int ny(int a,int b){
int x,y;
ex(a,b,x,y);
x=(x%b+b)%b;
return x;
}
inline int ksm(int x,int y,int p){
int res=1;
while(y){
if(y&1) res=((res)*(x))%p;
x=((x)*(x))%p;
y>>=1;
}
return res;
}
inline int bsgs(int a,int b,int p){
s.clear();
int n=ceil(sqrt(p));
b%=p;
for(int i=1;i<=n;i++){
b=b*a%p;
s[b]=i;
}
b=1;
int h=ksm(a,n,p);
for(int i=1;i<=n;i++){
b=b*h%p;
if(s[b]) return ((i*n-s[b])%p+p)%p;
}
return -1;
}
inline int bs(int a,int b,int p){
if(b==1||p==1) return 0;
int sum=1,n=gcd(a,p),m=0;
while(n!=1){
if(b%n!=0) {
return -1;
}
b/=n;
p/=n;
sum=sum*(a/n)%p;
m++;
if(sum==b) return m;
n=gcd(a,p);
}
int h=bsgs(a,b*ny(sum,p)%p,p);
if(h==-1) return -1;
return h+m;
}
signed main(){
a=read();
p=read();
b=read();
while(a||p||b){
a%=p;
b%=p;
if(bs(a,b,p)==-1) printf("No Solution\n");
else
printf("%lld\n",bs(a,b,p));
a=read();
p=read();
b=read();
}
return 0;
}