Problem:
Score : 500 points

Problem Statement

We have N integers. The i-th number is A_i.

\{A_i\} is said to be pairwise coprime when GCD(A_i,A_j)=1 holds for every pair (i, j) such that 1\leq i < j \leq N.

\{A_i\} is said to be setwise coprime when \{A_i\} is not pairwise coprime but GCD(A_1,\ldots,A_N)=1.

Determine if \{A_i\} is pairwise coprime, setwise coprime, or neither.

Here, GCD(\ldots) denotes greatest common divisor.

Constraints

2 \leq N \leq 10^6

1 \leq A_i\leq 10^6

Input

Input is given from Standard Input in the following format:

N
A_1 \ldots A_N

Output

If \{A_i\} is pairwise coprime, print pairwise coprime; if \{A_i\} is setwise coprime, print setwise coprime; if neither, print not coprime.

Sample Input 1

3
3 4 5

Sample Output 1

pairwise coprime

GCD(3,4)=GCD(3,5)=GCD(4,5)=1, so they are pairwise coprime.

Sample Input 2

3
6 10 15

Sample Output 2

setwise coprime

Since GCD(6,10)=2, they are not pairwise coprime. However, since GCD(6,10,15)=1, they are setwise coprime.

Sample Input 3

3
6 10 16

Sample Output 3

not coprime

GCD(6,10,16)=2, so they are neither pairwise coprime nor setwise coprime.

Solution in Fortran (GNU Fortran 9.2.1) (judge verdict: Runtime Error)

program main
    implicit none
    integer(kind=16) :: n,i,other
    integer(kind=16),allocatable :: a(:),multiplied_a(:)
    logical :: Flag
    read*,n
    allocate(a(n),multiplied_a(n+1))
    read*,a
    multiplied_a(1) = 1
    do i = 2,n+1
        multiplied_a(i) = multiplied_a(i-1) * a(i-1)
    end do
    !print*,multiplied_a
    Flag = .TRUE.
    do i = 2,n
        other = multiplied_a(n+1) / multiplied_a(i)
        !print*,a(i-1),other,gcd(a(i-1),other)
        if (gcd(a(i-1),other) .ne. 1) then
            Flag = .False.
            exit
        endif 
    end do
    if (Flag) then
        print*,'pairwise coprime'
        stop
    end if
    if (gcds(a,n) == 1) then
        print*,'setwise coprime'
    else
        print*,'not coprime'
    endif 
    stop
contains
integer(16) function gcd(a, b)
    implicit none
    integer(16), intent(IN) :: a, b
    integer(16) :: l, m, n

    m = a
    n = b

    do
        l = mod(m, n)
        if (l == 0) exit
        m = n
        n = l
    end do

    gcd = n

    return
end function gcd
integer(16) function gcds(a,n)
    implicit none
    integer(16), intent(IN) :: a(n),n
    integer(16) :: i
    gcds = a(1)
    do i = 1,n
        gcds = gcd(gcds,a(i))
    end do
end function gcds
end program main