rt,测试的就是原数据/kk
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<stack>
#include<bitset>
#include<map>
#include<set>
#include<unordered_map>
#include<ctime>
#include<random>
#define gc getchar
#define pc putchar
#define p__ puts("")
#define debug puts("-1")
#define rep(a,b,c) for(int a=b;a<=c;a++)
#define per(a,b,c) for(int a=b;a>=c;a--)
#define int long long
using namespace std;
inline int rd(){
int x=0,f=1;char ch=gc();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=gc();}
while(isdigit(ch)){x=x*10+ch-48;ch=gc();}return x*f;
}
inline void write(int x,char ch='\0'){
if(x<0){x=-x;pc('-');}
int y=0;char z[30];
while(!y||x)z[y++]=x%10+48,x/=10;
while(y--)pc(z[y]);if(ch!='\0')pc(ch);
}
int mod,a,b;
int mul(int &x,int y){x=x*y%mod;}
int ksm(int x,int y){
int res=1;
while(y){
if(y&1)mul(res,x);mul(x,x);y>>=1;
}
return res;
}
int gcd(int x,int y){
return !y?x:gcd(y,x%y);
}
unordered_map<int,int>vis;
int BSGS(int a,int b,int p){
int t=sqrt(p)+1;
int x=b%p;
rep(i,0,t-1)vis[x]=i+1,mul(x,a);
x=ksm(a,t);
int tmp=x;
rep(i,1,t){//phi(t)=t-1
if(vis[tmp]) return i*t-vis[tmp]+1;
mul(tmp,x);
}
return -1;
}
signed main(){
mod=rd(),a=rd(),b=rd();
if(b%gcd(a,mod)) return puts("no solution"),0;
int res=BSGS(a,b,mod);
if(res==-1) puts("no solution");
else write(res);
}
/*
a^x = b (mod p)
order T=sqrt(p),then:
x=A*x-B
a^(A*x)=b*a^B(mod p)
put b*a^B into hash[]
brute for a A
*/