#include <bits/stdc++.h>
using namespace std;
using u64 = uint64_t;
using u128 = unsigned __int128;
static constexpr u64 bases[] =
{2ULL, 325ULL, 9375ULL, 28178ULL,450775ULL, 9780504ULL, 1795265022ULL};
static constexpr u64 small_primes[] = {2ULL,3ULL,5ULL,7ULL,11ULL,13U,17ULL};
static inline u64 mulmod(u64 a, u64 b, u64 mod){
return (u128)a*b %mod;
}
static inline u64 modpow(u64 base, u64 expo, u64 mod){
u64 res = 1;
base %= mod;
while(expo){
if(expo&1) res = mulmod(res, base, mod);
base = mulmod(base, base, mod);
expo >>= 1;
}
return res;
}
static inline bool isComposite(u64 a, u64 d, int s, u64 n){
u64 x = modpow(a, d, n);
if(x==1 || x==n-1) return false;
for(int r=1; r<s; r++){
x = mulmod(x, x, n);
if(x==n-1) return false;
}
return true;
}
bool isPrime(u64 n){
if(n<2) return false;
for(u64 p : small_primes){
if(n==p) return true;
if(n%p==0) return false;
}
u64 d = n-1;
int s = __builtin_ctzll(d);
d >>= s;
for(u64 a : bases){
if(a%n==0) continue;
if(isComposite(a, d, s, n)) return false;
}
return true;
}
int main(){
cout << (isPrime(561) ? "prime\n" : "not prime\n");
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyB1NjQgID0gdWludDY0X3Q7CnVzaW5nIHUxMjggPSB1bnNpZ25lZCBfX2ludDEyODsKCnN0YXRpYyBjb25zdGV4cHIgdTY0IGJhc2VzW10gPSAKezJVTEwsIDMyNVVMTCwgOTM3NVVMTCwgMjgxNzhVTEwsNDUwNzc1VUxMLCA5NzgwNTA0VUxMLCAxNzk1MjY1MDIyVUxMfTsKCnN0YXRpYyBjb25zdGV4cHIgdTY0IHNtYWxsX3ByaW1lc1tdID0gezJVTEwsM1VMTCw1VUxMLDdVTEwsMTFVTEwsMTNVLDE3VUxMfTsKCnN0YXRpYyBpbmxpbmUgdTY0IG11bG1vZCh1NjQgYSwgdTY0IGIsIHU2NCBtb2QpewogICAgcmV0dXJuICh1MTI4KWEqYiAlbW9kOwp9CgpzdGF0aWMgaW5saW5lIHU2NCBtb2Rwb3codTY0IGJhc2UsIHU2NCBleHBvLCB1NjQgbW9kKXsKICAgIHU2NCByZXMgPSAxOwogICAgYmFzZSAlPSBtb2Q7CiAgICB3aGlsZShleHBvKXsKICAgICAgICBpZihleHBvJjEpIHJlcyA9IG11bG1vZChyZXMsIGJhc2UsIG1vZCk7CiAgICAgICAgYmFzZSA9IG11bG1vZChiYXNlLCBiYXNlLCBtb2QpOwogICAgICAgIGV4cG8gPj49IDE7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CgpzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21wb3NpdGUodTY0IGEsIHU2NCBkLCBpbnQgcywgdTY0IG4pewogICAgdTY0IHggPSBtb2Rwb3coYSwgZCwgbik7CiAgICBpZih4PT0xIHx8IHg9PW4tMSkgcmV0dXJuIGZhbHNlOwoKICAgIGZvcihpbnQgcj0xOyByPHM7IHIrKyl7CiAgICAgICB4ID0gbXVsbW9kKHgsIHgsIG4pOwogICAgICAgaWYoeD09bi0xKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBpc1ByaW1lKHU2NCBuKXsKICAgIAogICAgaWYobjwyKSByZXR1cm4gZmFsc2U7CgogICAgZm9yKHU2NCBwIDogc21hbGxfcHJpbWVzKXsKICAgICAgIGlmKG49PXApIHJldHVybiB0cnVlOwogICAgICAgaWYobiVwPT0wKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAKICAgIHU2NCBkID0gbi0xOwogICAgaW50IHMgPSBfX2J1aWx0aW5fY3R6bGwoZCk7CiAgICBkID4+PSBzOwoKICAgIGZvcih1NjQgYSA6IGJhc2VzKXsKICAgICAgIGlmKGElbj09MCkgY29udGludWU7CiAgICAgICBpZihpc0NvbXBvc2l0ZShhLCBkLCBzLCBuKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmludCBtYWluKCl7CiAgICBjb3V0IDw8IChpc1ByaW1lKDU2MSkgPyAicHJpbWVcbiIgOiAibm90IHByaW1lXG4iKTsKfQo=