#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<unordered_map>
#define reg register
#define pb push_back
#define qr read()
#define LL long long
using namespace std;
inline int read()
{
int x=0,k=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')k=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
return x*k;
}
int exgcd(int a,int b,int &x,int &y)
{
if(!b)
{
x = 1;
y = 0;
return a;
}
int G = exgcd(b,a%b,x,y);
int Y = y;
y = x - a / b * y;
x = Y;
return G;
}
int p;
inline int fp(int a,int b)
{
int ans = 1;
while(b)
{
if(b&1)ans = 1ll * ans * a % p;
a = 1ll * a * a % p;
b >>= 1;
}
return ans;
}
unordered_map<int,int>h;
int a,b;
int exbsgs()
{
a %= p,b %= p;
if(b == 1 || p == 1)return 0;
int d,ax = 1,cnt = 0,x,y;
while((d = exgcd(a,p,x,y)) ^ 1)
{
if(b % d)return -1;
cnt++;
ax = 1ll * ax * (a / d) % p;
p /= d,b /= d;
if(ax == b)return cnt;
}
exgcd(ax,p,x,y);
int inv = (x % p + p) % p;
b = 1ll * inv * b % p;
h.clear();
if(a % p == 0)return -1;
int m = ceil(sqrt(p));
int A = 1,B;
for(int i = 0; i < m; i++)
{
h[1ll * b * A % p] = i;
A = 1ll * A * a % p;
}
if(!A) return !b? 1+cnt:-1;
A = fp(a,m),B = A;
for(int i = 1; i <= m; i++)
{
if(h[A])
{
return i * m - h[A] + cnt;
}
A = 1ll * A * B % p;
}
return -1;
}
int main()
{
while(scanf("%d%d%d",&a,&p,&b) == 3 && a && b && p)
{
int ans = exbsgs();
if(ans == -1)printf("No Solution\n");
else printf("%d\n",ans);
}
}