class prime_factorize_by_osa_k():

    def __init__(self, max_val):

        '''

        割ることが出来る最小の値を格納したリストを返す

        :param max_val:

        :return:

        '''

        self.minFactor = [-1] * (max_val + 1)

        for i in range(2, max_val + 1):

            if self.minFactor[i] == -1:

                self.minFactor[i] = i

                # エラトステネスの篩と同様の処理を行う

                for j in range(i * i, max_val + 1, i):

                    if self.minFactor[j] == -1:

                        self.minFactor[j] = i



    def osa_k(self, n):

        '''

        preprocessをしたあと、O(logN)で素因数分解を行う。nの最大値をn_maxとする。

        :param n:

        :return:

        '''

        from collections import defaultdict

        d = defaultdict(int)

        now = n

        while now > 1:

            d[self.minFactor[now]] += 1

            now //= self.minFactor[now]

        return d

def gcd(a, b):

    while b: a, b = b, a % b

    return a



N = int(eval(input()))

A = list(map(int, input().split()))

# N = 10 ** 6

# A = [10 ** 6] * N

ob = prime_factorize_by_osa_k(10 ** 6)

pairwise = False

prime_key = set(ob.osa_k(A[-1]).keys())

break_flag = False

prime_flags = [False] * (10 ** 6 + 1)

for i in range(N):

    for key in list(ob.osa_k(A[i]).keys()):

        if prime_flags[key]:

            break_flag = True

            break

        else:

            prime_flags[key] = True

    if break_flag:

        break

else:

    pairwise = True

if pairwise:

    print('pairwise coprime')

    exit()

work = gcd(A[0], A[1])

for i in range(2, N):

    work = gcd(work, A[i])

if work != 1:

    print('not coprime')

else:

    print('setwise coprime')
def gcd(a, b):

    while b: a, b = b, a % b

    return a

def isPrimeMR(n):

    d = n - 1

    d = d // (d & -d)

    L = [2]

    for a in L:

        t = d

        y = pow(a, t, n)

        if y == 1: continue

        while y != n - 1:

            y = (y * y) % n

            if y == 1 or t == n - 1: return 0

            t <<= 1

    return 1

def findFactorRho(n):

    m = 1 << n.bit_length() // 8

    for c in range(1, 99):

        f = lambda x: (x * x + c) % n

        y, r, q, g = 2, 1, 1, 1

        while g == 1:

            x = y

            for i in range(r):

                y = f(y)

            k = 0

            while k < r and g == 1:

                ys = y

                for i in range(min(m, r - k)):

                    y = f(y)

                    q = q * abs(x - y) % n

                g = gcd(q, n)

                k += m

            r <<= 1

        if g == n:

            g = 1

            while g == 1:

                ys = f(ys)

                g = gcd(abs(x - ys), n)

        if g < n:

            if isPrimeMR(g): return g

            elif isPrimeMR(n // g): return n // g

            return findFactorRho(g)

def primeFactor(n):

    i = 2

    ret = {}

    rhoFlg = 0

    while i*i <= n:

        k = 0

        while n % i == 0:

            n //= i

            k += 1

        if k: ret[i] = k

        i += 1 + i % 2

        if i == 101 and n >= 2 ** 20:

            while n > 1:

                if isPrimeMR(n):

                    ret[n], n = 1, 1

                else:

                    rhoFlg = 1

                    j = findFactorRho(n)

                    k = 0

                    while n % j == 0:

                        n //= j

                        k += 1

                    ret[j] = k



    if n > 1: ret[n] = 1

    if rhoFlg: ret = {x: ret[x] for x in sorted(ret)}

    return ret

def gcd(a, b):

    while b: a, b = b, a % b

    return a



N = int(eval(input()))

A = list(map(int, input().split()))

# N = 10 ** 6

# A = [10 ** 6] * N

pairwise = False

prime_key = set(primeFactor(A[-1]).keys())

break_flag = False

prime_flags = [False] * (10 ** 6 + 1)

for i in range(N):

    for key in list(primeFactor(A[i]).keys()):

        if prime_flags[key]:

            break_flag = True

            break

        else:

            prime_flags[key] = True

    if break_flag:

        break

else:

    pairwise = True

if pairwise:

    print('pairwise coprime')

    exit()

work = gcd(A[0], A[1])

for i in range(2, N):

    work = gcd(work, A[i])

if work != 1:

    print('not coprime')

else:

    print('setwise coprime')
class prime_factorize_by_osa_k:
    def __init__(self, max_val):
        """
        割ることが出来る最小の値を格納したリストを返す
        :param max_val:
        :return:
        """
        self.minFactor = [-1] * (max_val + 1)
        for i in range(2, max_val + 1):
            if self.minFactor[i] == -1:
                self.minFactor[i] = i
                # エラトステネスの篩と同様の処理を行う
                for j in range(i * i, max_val + 1, i):
                    if self.minFactor[j] == -1:
                        self.minFactor[j] = i

    def osa_k(self, n):
        """
        preprocessをしたあと、O(logN)で素因数分解を行う。nの最大値をn_maxとする。
        :param n:
        :return:
        """
        from collections import defaultdict

        d = defaultdict(int)
        now = n
        while now > 1:
            d[self.minFactor[now]] += 1
            now //= self.minFactor[now]
        return d


def gcd(a, b):
    while b:
        a, b = b, a % b
    return a


N = int(eval(input()))
A = list(map(int, input().split()))
# N = 10 ** 6
# A = [10 ** 6] * N
ob = prime_factorize_by_osa_k(10**6)
pairwise = False
prime_key = set(ob.osa_k(A[-1]).keys())
break_flag = False
prime_flags = [False] * (10**6 + 1)
for i in range(N):
    for key in list(ob.osa_k(A[i]).keys()):
        if prime_flags[key]:
            break_flag = True
            break
        else:
            prime_flags[key] = True
    if break_flag:
        break
else:
    pairwise = True
if pairwise:
    print("pairwise coprime")
    exit()
work = gcd(A[0], A[1])
for i in range(2, N):
    work = gcd(work, A[i])
if work != 1:
    print("not coprime")
else:
    print("setwise coprime")

def gcd(a, b):
    while b:
        a, b = b, a % b
    return a


def isPrimeMR(n):
    d = n - 1
    d = d // (d & -d)
    L = [2]
    for a in L:
        t = d
        y = pow(a, t, n)
        if y == 1:
            continue
        while y != n - 1:
            y = (y * y) % n
            if y == 1 or t == n - 1:
                return 0
            t <<= 1
    return 1


def findFactorRho(n):
    m = 1 << n.bit_length() // 8
    for c in range(1, 99):
        f = lambda x: (x * x + c) % n
        y, r, q, g = 2, 1, 1, 1
        while g == 1:
            x = y
            for i in range(r):
                y = f(y)
            k = 0
            while k < r and g == 1:
                ys = y
                for i in range(min(m, r - k)):
                    y = f(y)
                    q = q * abs(x - y) % n
                g = gcd(q, n)
                k += m
            r <<= 1
        if g == n:
            g = 1
            while g == 1:
                ys = f(ys)
                g = gcd(abs(x - ys), n)
        if g < n:
            if isPrimeMR(g):
                return g
            elif isPrimeMR(n // g):
                return n // g
            return findFactorRho(g)


def primeFactor(n):
    i = 2
    ret = {}
    rhoFlg = 0
    while i * i <= n:
        k = 0
        while n % i == 0:
            n //= i
            k += 1
        if k:
            ret[i] = k
        i += 1 + i % 2
        if i == 101 and n >= 2**20:
            while n > 1:
                if isPrimeMR(n):
                    ret[n], n = 1, 1
                else:
                    rhoFlg = 1
                    j = findFactorRho(n)
                    k = 0
                    while n % j == 0:
                        n //= j
                        k += 1
                    ret[j] = k
    if n > 1:
        ret[n] = 1
    if rhoFlg:
        ret = {x: ret[x] for x in sorted(ret)}
    return ret


def gcd(a, b):
    while b:
        a, b = b, a % b
    return a


N = int(eval(input()))
A = list(map(int, input().split()))
# N = 10 ** 6
# A = [10 ** 6] * N
pairwise = False
prime_key = set(primeFactor(A[-1]).keys())
break_flag = False
prime_flags = [False] * (10**6 + 1)
for i in range(N):
    for key in list(primeFactor(A[i]).keys()):
        if prime_flags[key]:
            break_flag = True
            break
        else:
            prime_flags[key] = True
    if break_flag:
        break
else:
    pairwise = True
if pairwise:
    print("pairwise coprime")
    exit()
work = gcd(A[0], A[1])
for i in range(2, N):
    work = gcd(work, A[i])
if work != 1:
    print("not coprime")
else:
    print("setwise coprime")

-class prime_factorize_by_osa_k: -    def __init__(self, max_val): -        """ -        割ることが出来る最小の値を格納したリストを返す -        :param max_val: -        :return: -        """ -        self.minFactor = [-1] * (max_val + 1) -        for i in range(2, max_val + 1): -            if self.minFactor[i] == -1: -                self.minFactor[i] = i -                # エラトステネスの篩と同様の処理を行う -                for j in range(i * i, max_val + 1, i): -                    if self.minFactor[j] == -1: -                        self.minFactor[j] = i +def gcd(a, b): +    while b: +        a, b = b, a % b +    return a -    def osa_k(self, n): -        """ -        preprocessをしたあと、O(logN)で素因数分解を行う。nの最大値をn_maxとする。 -        :param n: -        :return: -        """ -        from collections import defaultdict -        d = defaultdict(int) -        now = n -        while now > 1: -            d[self.minFactor[now]] += 1 -            now //= self.minFactor[now] -        return d +def isPrimeMR(n): +    d = n - 1 +    d = d // (d & -d) +    L = [2] +    for a in L: +        t = d +        y = pow(a, t, n) +        if y == 1: +            continue +        while y != n - 1: +            y = (y * y) % n +            if y == 1 or t == n - 1: +                return 0 +            t <<= 1 +    return 1 + + +def findFactorRho(n): +    m = 1 << n.bit_length() // 8 +    for c in range(1, 99): +        f = lambda x: (x * x + c) % n +        y, r, q, g = 2, 1, 1, 1 +        while g == 1: +            x = y +            for i in range(r): +                y = f(y) +            k = 0 +            while k < r and g == 1: +                ys = y +                for i in range(min(m, r - k)): +                    y = f(y) +                    q = q * abs(x - y) % n +                g = gcd(q, n) +                k += m +            r <<= 1 +        if g == n: +            g = 1 +            while g == 1: +                ys = f(ys) +                g = gcd(abs(x - ys), n) +        if g < n: +            if isPrimeMR(g): +                return g +            elif isPrimeMR(n // g): +                return n // g +            return findFactorRho(g) + + +def primeFactor(n): +    i = 2 +    ret = {} +    rhoFlg = 0 +    while i * i <= n: +        k = 0 +        while n % i == 0: +            n //= i +            k += 1 +        if k: +            ret[i] = k +        i += 1 + i % 2 +        if i == 101 and n >= 2**20: +            while n > 1: +                if isPrimeMR(n): +                    ret[n], n = 1, 1 +                else: +                    rhoFlg = 1 +                    j = findFactorRho(n) +                    k = 0 +                    while n % j == 0: +                        n //= j +                        k += 1 +                    ret[j] = k +    if n > 1: +        ret[n] = 1 +    if rhoFlg: +        ret = {x: ret[x] for x in sorted(ret)} +    return ret -ob = prime_factorize_by_osa_k(10**6) -prime_key = set(ob.osa_k(A[-1]).keys()) +prime_key = set(primeFactor(A[-1]).keys()) -    for key in list(ob.osa_k(A[i]).keys()): +    for key in list(primeFactor(A[i]).keys()):