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 Kotlin (1.3.71) (judge verdict: Wrong Answer)

import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.PrintWriter
import kotlin.math.max
import kotlin.math.min

val br = BufferedReader(InputStreamReader(System.`in`))
val out = PrintWriter(System.out)

fun main() {
    br.use { out.use {
        solve()
        out.flush()
    } }
}

fun solve() {
//    すべてが素　同じものがない
    // 最大公約数が1 やるだけ

    val n = readInteger()
    val aList = readLongList()
    val tmp = IntArray(1000001)

    val primeTable = primeTable(1000000)
    for (a in aList) {
        var target = a.toInt()
        while (primeTable[target] != target.toLong()) {
            val prime = primeTable[target].toInt()
            tmp[prime]++

            while (target > 1 && target % prime == 0) {
                target /= prime
            }
        }
    }

    if (tmp.max()!! <= 1) {
        out.println("pairwise coprime")
        return
    }

    val aaaa = aList.reduce { acc, a -> gcd(acc, a) }
    if (aaaa == 1L) {
        out.println("setwise coprime")
        return
    }

    out.println("not coprime")
}

/** O(nlog(logn)) // n * n <= Int.MAX_VALUE, n <= 10^6 */
fun primeTable(n: Int): LongArray {
    val table = LongArray(n + 1) { it.toLong() }
    if (n >= 0) table[0] = 0
    if (n >= 1) table[1] = 1
    var i = 2
    while (i * i <= n) {
        if (table[i] == i.toLong()) {
            for (j in (i + i)..n step i) { table[j] = i.toLong()}
        }
        i++
    }
    return table
}

/** O(log(n)): n = min(a, b) */
tailrec fun gcd(a: Long, b: Long): Long = if (b == 0L) a else gcd(b, a % b)

fun readInteger() = Integer.parseInt(br.readLine())
fun readLong() = java.lang.Long.parseLong(br.readLine())
fun readStringList() = br.readLine()!!.split(' ')
fun readIntegerList() = readStringList().map(Integer::parseInt)
fun readLongList() = readStringList().map(java.lang.Long::parseLong)
fun readDoubleList() = readStringList().map(java.lang.Double::parseDouble)