func_code_string: #include <bits/stdc++.h>   using namespace std;   int ok[1 << 20];   int F[1 << 9][1 << 9];   int d[1 << 9];   int bfs(int n) {     d[0] = 0;     for (int i = 1; i <= n; ++i) d[i] = -1;     queue<int> Q;     Q.push(0);     while (!Q.empty() && d[n] == -1) {       int node = Q.front();       Q.pop();       for (int i = 0; i <= n; ++i)         if (d[i] == -1 && F[node][i]) Q.push(i), d[i] = node;     }     if (d[n] == -1) return 0;     int flow = 1e9;     for (int vertex = n; vertex; vertex = d[vertex])       flow = min(flow, F[d[vertex]][vertex]);     for (int vertex = n; vertex; vertex = d[vertex])       F[d[vertex]][vertex] -= flow, F[vertex][d[vertex]] += flow;     return flow;   }   vector<int> order;   int mark[1 << 9];   void dfs(int node, int n, int how) {     mark[node] = 1;     order.push_back(node);     for (int i = 1; i <= n; ++i)       if (!mark[i] && (F[node][i] == how && F[i][node] != how))         dfs(i, n, 1 - how);   }   int Val[1 << 9];   int main(void) {     int n;     for (int i = 2; i <= 1e6; ++i) ok[i] = 1;     for (int i = 2; i <= 1e3; ++i)       if (ok[i])         for (int j = i * i; j <= 1e6; j += i) ok[j] = 0;     cin >> n;     vector<int> a, b, pa, pb;     for (int i = 1; i <= n; ++i) {       int val;       cin >> val;       Val[i] = val;       if (val & 1)         a.push_back(val), pa.push_back(i);       else         b.push_back(val), pb.push_back(i);     }     if (a.size() != b.size()) return puts( Impossible ) * 0;     int sz = a.size();     for (int i = 1; i <= sz; ++i) F[0][i] = 2;     for (int i = 1; i <= sz; ++i) F[i + sz][sz + sz + 1] = 2;     for (int i = 0; i < sz; ++i)       for (int j = 0; j < sz; ++j)         if (ok[a[i] + b[j]]) F[i + 1][j + 1 + sz] = 1;     int flow = 0;     int cnt = 0;     while ((cnt = bfs(sz + sz + 1)) != 0) flow += cnt;     if (flow != sz + sz) return puts( Impossible ) * 0;     vector<vector<int> > cycles;     for (int i = 1; i <= sz + sz; ++i)       if (!mark[i]) {         order.clear();         dfs(i, sz + sz, 0);         for (auto &it : order)           if (it <= sz)             it = pa[it - 1];           else             it = pb[it - sz - 1];         cycles.push_back(order);       }     cout << (cycles.size()) <<   n ;     for (auto cycle : cycles) {       cout << cycle.size() <<    ;       for (auto it : cycle) cout << it <<    ;       cout <<   n ;     }     return 0;   }   