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 JavaScript (Node.js 12.16.1) (judge verdict: Accepted)

function Main(input) {
	input = input.trim().split("\n").map(function(x) { return x.split(" ")});
	let N = parseInt(input[0][0], 10);
	let A = input[1].map(e => parseInt(e, 10));
	let Amap = Array.from({length: 1e6 + 1}, () => false);
	let ansFlag0 = false;
	let N2 = N;
	let variation = 0;
	for (let i = 0; i < N; i++){
		if (Amap[A[i]]){
			if (A[i] !==1) ansFlag0 = true;
			N2 --;
			continue;
		}
		Amap[A[i]] = true;
		variation ++;
	}

	let bitmap = Array.from({length: 1e6 + 1}, () => false);
	bitmap[0] = true;
	bitmap[1] = true;

	
	// let ansFlag1 = false;
	let countList = [];
	for (let i = 2; i < bitmap.length; i++){
		if (bitmap[i]) continue;
		let count = 0;
		let j = 1;
		if (Amap[i * j]){
			count ++;
		}
		for (j = 2; j <= (1e6 / i); j++){
			bitmap[i * j] = true;
			if (Amap[i * j]){
				count ++;
			}

		}
		countList.push(count);
	}
	countList.sort((a,b) => a - b);
	let ans = "pairwise coprime";
	if (ansFlag0) ans = "setwise coprime";
	for (let i = 0; i < countList.length; i++){
		if (countList[i] <= 1) continue;
		if(countList[countList.length - 1] < N2){
			ans = "setwise coprime";
		} else {
			ans = "not coprime";
		}
	}
	if (variation === 1){
		if (A[0] === 1) ans = "pairwise coprime";
		else ans = "not coprime";
	}
	console.log(ans);
	
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));