![]()
1 #include <iostream>
2 using namespace std;
3 #define ll long long
4 const int N = 10000006;
5 ll n,p,r;
6 ll poww(ll a,ll b){
7 ll ans =1ll;
8 while(b){
9 if(b&1) ans =ans*a%p;
10 b>>=1;
11 a=a*a%p;
12 }
13 return ans%p;
14 }
15 int main()
16 {
17 //每次都要注意-1 -1的情况
18 scanf("%lld%lld%lld",&n,&p,&r);
19 if(n>=2*p){
20 if(r==0){
21 printf("%lld 1\n",p+1);
22 }
23 else{
24 printf("-1 -1\n");
25 }
26 }
27 else if(n>=p){
28 if(r==0){
29 int flag =0;
30 for(ll i=2;i<=n;i++){
31 if(i!=p)//起初if的{}写错了
32 {
33 printf("%lld 1\n",i);
34 flag =1;
35 break;
36 }
37 }
38 if(!flag)printf("-1 -1\n"); //n=p=2
39 }
40 else{
41 ll ans=1ll;
42 for(ll i=2;i<=n;i++) {
43 if(i!=p) ans =ans*i%p;
44 }
45 int flag =0;
46 for(ll i=1;i<p;i++){
47 if(ans*i%p==r) {
48 printf("%lld %lld\n",p,i);
49 flag =1;
50 break;
51 }
52 }
53 if(flag==0) printf("-1 -1\n");
54 }
55 }
56 else{
57 ll ans =1ll;
58 for(ll i=2;i<=n;i++) ans =ans*i%p;
59 int flag =0;
60 ans = poww(ans,p-2);//放到里面会超时
61 for(ll i=2;i<=n;i++){
62 ll x= r*i%p*ans%p;
63 // ans/i*x%p==r
64 // x=r*i%p/ans%p;
65 if(x>=1&&x<i){
66 printf("%lld %lld\n",i,x);
67 flag =1;
68 break;
69 }
70 }
71 if(!flag) printf("-1 -1\n");
72 }
73 return 0;
74
75 }