#include <bits/stdc++.h>
#define LL long long
#define ULL unsigned long long
#define PII pair<int, int>
#define PIL pair<int, long long>
#define PLI pair<long long, int>
#define PLL pair<long long, long long>
#define mp make_pair
#define eb emplace_back
#define pb push_back
#define pf push_front
#define fi first
#define se second
#define sf scanf
#define prf printf
#define el putchar('\n')
#define mms(arr, n) memset(arr, n, sizeof(arr))
#define mmc(arr1, arr2) memcpy(arr1, arr2, sizeof(arr2))
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
template <typename T> inline void rd(T &x){
x = 0; bool f = true; char ch = getchar();
while(ch < '0' || ch > '9'){ f = ((ch == '-') ? false : true); ch = getchar();}
while(ch >= '0' && ch <= '9'){ x = (x << 1) + (x << 3) + (ch ^ '0'); ch = getchar();}
if(!f) x = -x;
}
template <typename T, typename ...Args> inline void rd(T &x, Args &...args){ rd(x); rd(args...);}
using namespace std;
int p, a, b;
int gcd(int a, int b){ return b ? gcd(b, a % b) : a;}
int qmi(LL a, int k, int p){
int res = 1;
for(; k; k >>= 1, a = a * a % p) if(k & 1) res = res * a % p;
return res;
}
int exBSGS(int p, int a, int b){
a %= p, b %= p;
int D = 1, k = 0, d;
auto calc = [&](){ D *= d, p /= d, b /= d;};
while(1){
d = gcd(a, p);
if(k == 1) break;
if(b % d != 0) return -1;
calc(); k++;
}
unordered_map<int, int> mmap;
int ta = qmi(a, k, p) / D;
int m = (int)sqrt(p) + 1;
int tt = qmi(a, m, p);
int t = (LL)ta * tt % p;
for(int j = 0; j <= m; j++){
mmap[b] = j;
b = (LL)b * a % p;
}
int gi, gj, f = 0;
for(int i = 1; i <= m; i++){
auto c = mmap[t];
if(c){ f = 1, gi = i, gj = c; break;}
t = (LL)t * tt % p;
}
if(f) return gi * m - gj + k;
else return -1;
}
int main(){
while(rd(a, p, b), a || p || b){
int ans = exBSGS(p, a, b);
if(ans == -1) prf("No Solution\n");
else prf("%d\n", ans);
}
return 0;
}