int main(){ char carmichael; long a, n; chieve(); while( 1 ){ scanf( "%ld" , &n ); if( n == 0 ) return 0; if( prime[n] ) carmichael = 0; else carmichael = 1; for( a = 2; carmichael & a < n; a++ ) if( exp_mod( &a, n, &n ) != a ) carmichael = 0; if( carmichael ) printf( "The number %ld is a Carmichael number.\n", n ); else printf( "%ld is normal.\n", n ); } return 0; }
long exp_mod( long *a, int n, long *mod ){ long r; if( n == 1 ) return *a; r = exp_mod( a, n / 2, mod ); if( n & 1 ) return ( ( ( r * r ) % *mod ) * *a ) % *mod; return ( r * r ) % *mod; }
unsigned long long exp_mod(unsigned long long M, unsigned long long e, long long n) { if(e==1) return M%n; else { unsigned long long a=exp_mod(M, e/2,n); unsigned long long temp= (a*a)%n; if(e%2==0) return temp; else return (temp*M)%n; } }
bool witness (unsigned long long a, unsigned long long n) { unsigned long long t,u; get_t_u(n,t,u); v[0]=exp_mod(a,u,n); for(unsigned long long i=1;i<=t;i++) { v[i]=(v[i-1]*v[i-1])%n; if(v[i]==1 && v[i-1]!=1 && v[i-1]!=n-1) return 1; } if(v[t]!=1) return 1; return 0; }
int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ int tt; scanf("%d",&tt); while (tt--) { int n,m,ans; scanf("%d %d",&n,&m); if (n==1) ans = m; else if (n==2) ans = (int) (((long long) m) * (m-1) % MOD); else ans = (int) (((long long) m) * (m-1) % MOD * exp_mod(m-2, n-2, MOD) % MOD); printf("%d\n",ans); } return 0; }
int is_probably_prime(llu n) { if (n <= 1) return 0; if (n <= 3) return 1; llu s = 0, d = n - 1; while (d % 2 == 0) { d/= 2; s++; } for (int k = 0; k < 64; k++) { llu a = (llrand() % (n - 3)) + 2; llu x = exp_mod(a, d, n); if (x != 1 && x != n-1) { for (int r = 1; r < s; r++) { x = mul_mod(x, x, n); if (x == 1) return 0; if (x == n-1) break; } if (x != n-1) return 0; } } return 1; }