using System;
using System.Collections;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Threading.Tasks;

class Program
{

	//最大公約数を求める関数（Gratest Common Divisor）
	//計算量はO(logN)（より小さい方の整数をNとしたとき）
	//タイプはulongとする
	static ulong GCD(ulong a, ulong b)
	{
		//より大きい方をnとする
		ulong n = Math.Max(a, b);
		ulong m = Math.Min(a, b);

		//ループ処理（ユークリッドの互除法を利用）
		while(m != 0){
			ulong rem = n % m;
			n = m;
			m = rem;
		}

		return n;
	}

	//最小公倍数を求める関数（Least Common Multiple）
	/*
	GCD(a,b) * LCM(a,b) = ab、という性質を利用
	即ち、LCM(a,b) = ab / GCD(a,b)である。
	*/
	static ulong LCM(ulong a, ulong b){
		ulong lcm = 0;

		//より大きい方をnとする
		ulong n = Math.Max(a, b);
		ulong m = Math.Min(a, b);

		//最大公約数
		/*
		当然だが、gcdはnの約数なので、n/gcdは適当
		*/
		ulong gcd = GCD(n,m);
		lcm = n / gcd * m;

		return lcm;
	}

	//与えられた整数n以下の素数をリストで返す関数
	//所謂「エラトステネスの篩」を使う。（計算量はO(n * log(logn))）
	//タイプはintとする
	static List<int> SieveOfEratosthenes(int n)
	{
		//素数を格納するリスト
		List<int> primeNumbers = new List<int>();

		//検索用の配列を初期化
		int[] searchArr = new int[n+1];
		for(int i=0; i<n+1; i++){
			searchArr[i] = i;
		}

		//入力値の平方根
		int root = (int)Math.Sqrt(n);

		//現在の最小の素数
		int p = 2;

		//平方根を超えるまでループ
		while(p <= root){
			//素数ではない場合、次へ
			if(searchArr[p] == 0){
				p ++;
				continue;
			}
			//素数の場合
			else{
				//素数リストに加える
				primeNumbers.Add(p);

				//当該素数pで割り切れる数を全て排除
				//p^2から始めれば良い
				for(int i=p*p; i<n+1; i++){
					if(i % p == 0){
						searchArr[i] = 0;
					}
				}

				//pを次へ
				p++;
			}
		}

		//平方根を超えた以降も加える
		for(int i=root+1; i<n+1; i++){
			if(searchArr[i] != 0){
				primeNumbers.Add(i);
			}
		}

		//出力
		return primeNumbers;
	}

	//Main
	static void Main(string[] args)
	{
		//読み込む
		int N = int.Parse(Console.ReadLine());
		ulong[] An = Console.ReadLine().Split(' ').Select(i => ulong.Parse(i)).ToArray();

		//累積最大公約数（後ろから埋めることに注意）
		ulong[] accum = new ulong[N];
		accum[N-1] = An[N-1];
		for(int i=N-1; i>0; i--){
			accum[i-1] = GCD(accum[i],An[i-1]);
		}

		/*debug
		for(int i=0; i<N; i++){
			Console.WriteLine("accum[{0}] = {1}",i,accum[i]);
		}
		*/

		//素数のリスト
		int max = 1000000;
		List<int> primeList = SieveOfEratosthenes(max);
		/*debug
		foreach(int p in primeList){
			Console.Write("{0}, ",p);
		}
		*/

		//pairwise coprimeかどうか
		bool pairwise = true;

		//約数に持つか否か
		bool[] exist = new bool[max];

		for(int i=0; i<N; i++){
			foreach(int p in primeList){
				//debug
				//Console.WriteLine("p={0}",p);

				//素数が超えた場合
				if(An[i] < (ulong)p){
					break;
				}

				//その素数を約数に持つ場合
				if(An[i] % (ulong)p == 0){
					//debug
					//Console.WriteLine("An[{0}]={1}, p={2}",i,An[i],p);

					if(exist[p-1]){
						pairwise = false;
						break;
					}
					else{
						exist[p-1] = true;
					}
				}
			}

			//探索はもう不要
			if(!pairwise){
				break;
			}
		}

		string ans = "";

		//条件判定
		if(pairwise){
			ans = "pairwise coprime";
		}
		else if(accum[0] == 1){
			ans = "setwise coprime";
		}
		else{
			ans = "not coprime";
		}

		Console.WriteLine(ans);
	}
}

