#include <bits/stdc++.h>
using namespace std;
#define int ll
#define ll long long
#define I32_MAX 2147483647
#define I64_MAX 9223372036854775807LL
#define I64_MAX2 1223372036854775807LL
#define INF I64_MAX2
#define MOD 1000000007
// #define MOD 998244353
#define MEM_SIZE 101010
#define DEBUG_OUT true
#define ALL(x) (x).begin(), (x).end()

template <typename T>
void DEBUG(T e)
{
  if (DEBUG_OUT == false)
    return;
  std::cout << e << " ";
}
template <typename T>
void DEBUG(const std::vector<T> &v)
{
  if (DEBUG_OUT == false)
    return;
  for (const auto &e : v)
  {
    std::cout << e << " ";
  }
  std::cout << std::endl;
}
template <typename T>
void DEBUG(const std::vector<std::vector<T>> &vv)
{
  if (DEBUG_OUT == false)
    return;
  for (const auto &v : vv)
  {
    DEBUG(v);
  }
}
template <class T, class... Ts>
void DEBUG(T d, Ts... e)
{
  if (DEBUG_OUT == false)
    return;
  DEBUG(d);
  DEBUG(e...);
}
template <class T>
void corner(bool flg, T hoge)
{
  if (flg)
  {
    cout << hoge << endl;
    abort();
  }
}
template <typename T1, typename T2>
inline bool chmax(T1 &a, T2 b) { return a < b && (a = b, true); }
template <typename T1, typename T2>
inline bool chmin(T1 &a, T2 b) { return a > b && (a = b, true); }

//BELOW
//solve
/* SegTree<X>(n,fx,ex): モノイド(集合X, 二項演算fx, 単位元ex)についてサイズnで構築
    set(int i, X x), build(): i番目の要素をxにセット。まとめてセグ木を構築する。O(n)
    update(i,x): i 番目の要素を x に更新。O(log(n))
    query(a,b): [a,b) 全てにfxを作用させた値を取得。O(log(n))
*/

//一点更新RQM用テンプレート
// auto fx = [](int x1, int x2) -> int { return min(x1, x2); };
// int ex = numeric_limits<int>::max();
// SegTree<int> rmq(n, fx, ex);

template <typename X>
struct SegTree
{
  using FX = function<X(X, X)>; // X•X -> X となる関数の型
  int n;
  FX fx;
  const X ex;
  vector<X> dat;
  SegTree(int n_, FX fx_, X ex_) : n(), fx(fx_), ex(ex_), dat(n_ * 4, ex_)
  {
    int x = 1;
    while (n_ > x)
    {
      x *= 2;
    }
    n = x;
  }

  void set(int i, X x) { dat[i + n - 1] = x; }
  void build()
  {
    for (int k = n - 2; k >= 0; k--)
      dat[k] = fx(dat[2 * k + 1], dat[2 * k + 2]);
  }

  void update(int i, X x)
  {
    i += n - 1;
    dat[i] = x;
    while (i > 0)
    {
      i = (i - 1) / 2; // parent
      dat[i] = fx(dat[i * 2 + 1], dat[i * 2 + 2]);
    }
  }

  X query(int a, int b) { return query_sub(a, b, 0, 0, n); }
  X query_sub(int a, int b, int k, int l, int r)
  {
    if (r <= a || b <= l)
    {
      return ex;
    }
    else if (a <= l && r <= b)
    {
      return dat[k];
    }
    else
    {
      X vl = query_sub(a, b, k * 2 + 1, l, (l + r) / 2);
      X vr = query_sub(a, b, k * 2 + 2, (l + r) / 2, r);
      return fx(vl, vr);
    }
  }
};

map<int, int> prime_factor(int n)
{
  map<int, int> ret;
  for (int i = 2; i * i <= n; i++)
  {
    while (n % i == 0)
    {
      ret[i]++;
      n /= i;
    }
  }
  if (n != 1)
    ret[n] = 1;
  return ret;
}

void solve(void)
{
  auto fx = [](int x1, int x2) -> int { return gcd(x1, x2); };
  int ex = 0;
  int n;
  cin >> n;
  SegTree<int> rmq(n, fx, ex);
  vector<int> vec(n);
  for (int i = 0; i < n; i++)
  {
    int x;
    cin >> x;
    vec[i] = x;
    rmq.set(i, x);
  }
  int flg1 = 1, flg2 = 1;

  map<int, int> mp1;
  int gg = vec[0];
  vector<int> find(101010, 0);
  for (int i = 0; i < n; i++)
  {
    auto mp = prime_factor(vec[i]);
    for (auto &&x : mp)
    {
      // DEBUG(x.first, x.second);
      if (find[x.first] != 0)
      {
        flg1 = 0;
        return;
      }
      find[x.first] = 1;
    }
    // gg = gcd(gg, vec[i]);
  }
  // if (gg != 1)
  //   flg2 = 0;
  // DEBUG(gcd(3, 4));
  rmq.build();
  // DEBUG(rmq.query(0, n));
  if (rmq.query(0, n) != 1)
    flg2 = 0;
  // DEBUG(rmq.query(0, n - 1));

  // DEBUG(flg1, flg2);
  if (flg1 == 1 and flg2 == 1)
  {
    cout << "pairwise coprime" << endl;
  }
  else if (flg1 == 0 and flg2 == 1)
  {
    cout << "setwise coprime" << endl;
  }
  else
  {
    cout << "not coprime" << endl;
  }

  return;
}

int32_t main(int32_t argc, const char *argv[])
{
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);

  std::cout << std::fixed;
  std::cout << std::setprecision(11);
  solve();

  return 0;
}
