#行ごとのbomの個数と列ごとのbomごとの個数を考える
#行ごとのbomの個数の最大Cmと列ごとのbomごとの個数のさいだいRmを考えるとおおよそRm+Cmこくらいと予想がつく
#ここで取りうる値はRm+CmかRm+Cm-1しかない(Rm+Rm-2以下のパターンの時は自明にRm,Cmの行列に爆弾を置いていないが、Rm,Cmの行列に爆弾を置いたRm+Cm-1この方が大きいため)
#よってRm+Cm,Rm+Cm-1はどこでわかれるのかをさぐると
#(Rmをとりうる列数)*(Cmを取りうる行数)こだけRm+Cmを取りうるがそこが全て爆弾で埋まっていると妥協せざるをえない(1こでも空いていればそこにおけば良い)
#よってRmこある列、Cmこある行を覚えておき、各々の爆弾がかぶらないことから
#Mこの爆弾すべてについて(Rmをとりうる列にいて)かつ(Cmを取りうる行にいる)のかを調べて、(Rmをとりうる列にいて)かつ(Cmを取りうる行にいる)爆弾の個数と
#(Rmをとりうる列数)*(Cmを取りうる行数)が一致していれば埋まっているのでRm+Cm-1、そうでないならRm+Cm

from math import *
import fractions
import sys
import collections
import itertools
import pprint
from collections import deque
from heapq import *
import copy
input=sys.stdin.readline
N=int(input())
A=list(map(int,input().split()))
n = 10**6
d={}
pairflag=1
setflag=0
#primes = set(range(2, n+1))
#for i in range(2, int(n**0.5+1)):
#    primes.difference_update(range(i*2, n+1, i))
#primes=list(primes)
#print(len(primes))
buf={}
seen={}
def ggcd(a,b):
    if(b==0):
        return a
    return ggcd(b,a%b)
for num in range(N):
    m=A[num]
    #print(m)
    for i in range(2, int(sqrt(m)) +1):
        while m%i==0:
            if seen.get(i)==None:
                buf[i]=1
                m //= i
            else:
                pairflag=0
                break
        if pairflag==0:
            break
    if pairflag==1:
        if m>1:
            if seen.get(m)==None:
                buf[m]=1
            else:
                pairflag=0
                break
    else:
        break
    #    if pairflag==0:
    #        break
    seen=buf.copy()
    #print(m,seen,buf,pairflag)
#print(pairflag)

num=A[0]
for i in range(1,N):
    num=ggcd(num,A[i])
if num==1:
    setflag=1
else:
    setflag=0

if pairflag==1:
    print("pairwise coprime")
elif setflag==1:
    print("setwise coprime")
else:
    print("not coprime")

"""
x=list(set(A))
for i in x:
    for j in range(2*i,10**6+1,i):
        if d.get(j)!=None:
            pairflag=0
            break
    if pairflag==0:
        break
print(pairflag)

"""