func_code_string: #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;   }   