#include <bits/stdc++.h>
using namespace std;
const int maxn = 700 + 7;
const int MOD = 1e9 + 7;
const int INF = 1e9 + 7;
int a[maxn];
int g[maxn][maxn];
int n;
struct as {
  int l, r, v;
  bool operator<(const as& b) const {
    if (l < b.l) return true;
    if (l > b.l) return false;
    if (r < b.r) return true;
    if (r > b.r) return false;
    return v < b.v;
  }
};
map<as, bool> mp;
int gcd(int x, int y) { return x == 0 ? y : gcd(y % x, x); }
void get() {
  int i, j;
  for (i = 0; i <= n; i++) {
    for (j = 0; j <= n; j++) {
      if (i != j && gcd(a[i], a[j]) != 1) {
        g[i][j] = 1;
      }
    }
  }
  return;
}
bool solve(int l, int r, int pos) {
  if (l > r) return true;
  if (mp.count(as{l, r, pos})) {
    return mp[as{l, r, pos}];
  }
  int i, j;
  for (i = l; i <= r; i++) {
    if (g[pos][i]) {
      if (solve(l, i - 1, i) && solve(i + 1, r, i)) {
        mp[as{l, r, pos}] = true;
        return true;
      }
    }
  }
  mp[as{l, r, pos}] = false;
  return false;
}
int main() {
  int i, j, m, t, z;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  get();
  if (solve(1, n, 0)) {
    puts("Yes");
  } else
    puts("No");
  return 0;
}
