from math import gcd

from functools import reduce

from sys import exit



# O(NlogA+AloglogA)解

MAX_A = 1000000

lowerst_prime = [0] * (MAX_A + 1) # 最小の素因数をいれる(2以上をみていけばいい)

count = [0] * (MAX_A + 1) # 約数として出てくる回数を数える



for i in range(2, MAX_A + 1): # エラトステネスの篩

    if lowerst_prime[i] != 0:

        continue

    lowerst_prime[i] = i

    for j in range(i * i, MAX_A + 1, i): # i * iスタートでいいのは、i * bはbの約数でもあるため

        if lowerst_prime[j] == 0:

            lowerst_prime[j] = i

# 入力

N = int(eval(input()))

A = [*list(map(int, input().split()))]



if reduce(gcd, A) != 1:

    print("not coprime")

    exit(0)



for i in range(N):

    while A[i] > 1:

        divide = lowerst_prime[A[i]]

        count[divide] += 1

        while A[i] % divide == 0: # 割れるだけ割る

            A[i] //= divide



for i in range(MAX_A + 1):

    if count[i] >= 2:

        print("setwise coprime")

        exit(0)

print("pairwise coprime")
from math import gcd

from functools import reduce

from sys import exit



# O(A+N)解

MAX_A = 1000000

lowerst_prime = [0] * (MAX_A + 1) # 最小の素因数をいれる(2以上をみていけばいい)

primes = [] # MAX_A以下の素数の集合

count = [0] * (MAX_A + 1) # 約数として出てくる回数を数える

for i in range(2, MAX_A + 1): # 線形時間で処理してくれる

    if lowerst_prime[i] == 0:

        lowerst_prime[i] = i

        primes.append(i)

    for p in primes:

        if i * p > MAX_A:

            break

        lowerst_prime[i * p] = p # p がi * p のもっとも小さな素因数となるときのみ更新されるので、線形時間アルゴリズムとなる

# 入力

N = int(eval(input()))

A = [*list(map(int, input().split()))]

if reduce(gcd, A) != 1:

    print("not coprime")

    exit(0)

for i in range(N):

    while A[i] > 1:

        divide = lowerst_prime[A[i]]

        if count[divide]:

            # A[x] % i == A[y] % i == 0 となるx != yが存在するので、i | gcd(x, y)となる

            print("setwise coprime")

            exit(0)

        count[divide] += 1

        while A[i] % divide == 0: # 割れるだけ割る

            A[i] //= divide

print("pairwise coprime")
from math import gcd
from functools import reduce
from sys import exit

# O(NlogA+AloglogA)解
MAX_A = 1000000
lowerst_prime = [0] * (MAX_A + 1)  # 最小の素因数をいれる(2以上をみていけばいい)
count = [0] * (MAX_A + 1)  # 約数として出てくる回数を数える
for i in range(2, MAX_A + 1):  # エラトステネスの篩
    if lowerst_prime[i] != 0:
        continue
    lowerst_prime[i] = i
    for j in range(i * i, MAX_A + 1, i):  # i * iスタートでいいのは、i * bはbの約数でもあるため
        if lowerst_prime[j] == 0:
            lowerst_prime[j] = i
# 入力
N = int(eval(input()))
A = [*list(map(int, input().split()))]
if reduce(gcd, A) != 1:
    print("not coprime")
    exit(0)
for i in range(N):
    while A[i] > 1:
        divide = lowerst_prime[A[i]]
        count[divide] += 1
        while A[i] % divide == 0:  # 割れるだけ割る
            A[i] //= divide
for i in range(MAX_A + 1):
    if count[i] >= 2:
        print("setwise coprime")
        exit(0)
print("pairwise coprime")

from math import gcd
from functools import reduce
from sys import exit

# O(A+N)解
MAX_A = 1000000
lowerst_prime = [0] * (MAX_A + 1)  # 最小の素因数をいれる(2以上をみていけばいい)
primes = []  # MAX_A以下の素数の集合
count = [0] * (MAX_A + 1)  # 約数として出てくる回数を数える
for i in range(2, MAX_A + 1):  # 線形時間で処理してくれる
    if lowerst_prime[i] == 0:
        lowerst_prime[i] = i
        primes.append(i)
    for p in primes:
        if i * p > MAX_A:
            break
        lowerst_prime[i * p] = p  # p がi * p のもっとも小さな素因数となるときのみ更新されるので、線形時間アルゴリズムとなる
# 入力
N = int(eval(input()))
A = [*list(map(int, input().split()))]
if reduce(gcd, A) != 1:
    print("not coprime")
    exit(0)
for i in range(N):
    while A[i] > 1:
        divide = lowerst_prime[A[i]]
        if count[divide]:
            # A[x] % i == A[y] % i == 0 となるx != yが存在するので、i | gcd(x, y)となる
            print("setwise coprime")
            exit(0)
        count[divide] += 1
        while A[i] % divide == 0:  # 割れるだけ割る
            A[i] //= divide
print("pairwise coprime")

-# O(NlogA+AloglogA)解 +# O(A+N)解 +primes = []  # MAX_A以下の素数の集合 -for i in range(2, MAX_A + 1):  # エラトステネスの篩 -    if lowerst_prime[i] != 0: -        continue -    lowerst_prime[i] = i -    for j in range(i * i, MAX_A + 1, i):  # i * iスタートでいいのは、i * bはbの約数でもあるため -        if lowerst_prime[j] == 0: -            lowerst_prime[j] = i +for i in range(2, MAX_A + 1):  # 線形時間で処理してくれる +    if lowerst_prime[i] == 0: +        lowerst_prime[i] = i +        primes.append(i) +    for p in primes: +        if i * p > MAX_A: +            break +        lowerst_prime[i * p] = p  # p がi * p のもっとも小さな素因数となるときのみ更新されるので、線形時間アルゴリズムとなる +        if count[divide]: +            # A[x] % i == A[y] % i == 0 となるx != yが存在するので、i | gcd(x, y)となる +            print("setwise coprime") +            exit(0) -for i in range(MAX_A + 1): -    if count[i] >= 2: -        print("setwise coprime") -        exit(0)