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 Java (OpenJDK 11.0.6) (judge verdict: Wrong Answer)



import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

public class Main {

	private static Scanner in;

	public static void main(String[] args) {
		in = new Scanner(System.in);

		int n = in.nextInt();
		int[] a = new int[n];
		
		for(int i=0; i<n; i++) {
			a[i] = in.nextInt();
			
		}
		
		int SIZE = (int)1e6+10;
		
		boolean[] isPrime = new boolean[SIZE];
		
		isPrime[0] = isPrime[1] = true;
		
		ArrayList<Integer>[] primes = new ArrayList[SIZE];
		for(int i=0; i<SIZE; i++) {
			primes[i] = new ArrayList<>();
		}
		
		for(int i=2; i<SIZE; i++) {
			if (!isPrime[i]) {
				for(int j=2*i; j<SIZE; j+=i) {
					isPrime[j] = true;
					primes[j].add(i);
				}
			} else {
				primes[i].add(i);
			}
		}
		
		HashMap<Integer, Integer> map = new HashMap<>();
		
		for(int i=0; i<n; i++) {
			for(int x: primes[a[i]]) {
				map.put(x, map.getOrDefault(x, 0)+1);
			}
		}
		
		boolean allOnes = true;
		boolean allMore = true;
		boolean allEqualtoN = true;
		
		for(int u: map.keySet()) {
			if (map.get(u)>1) {
				allOnes = false;
			}
			if (map.get(u)==1) {
				allMore = false;
			}
			if (map.get(u)==n) {
				allEqualtoN = false;
			}
		}
		if (allOnes) {
			System.out.println("pairwise coprime");
		} else if (!allEqualtoN) {
			System.out.println("not coprime");
		} else {
			System.out.println("setwise coprime");
		}
	}
	

}