func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = (int)1e9, maxn = (int)1e5 + 1;   const double eps = (double)1e-8;   const int mod = (int)1000000007;   int c[200009], a[200009], t, k, f, n;   vector<int> b[200009], o;   int main() {     cin >> n;     memset((c), 0, sizeof(c));     ;     for (int i = (1); i <= (n); i++) {       scanf( %d , &(a[i]));       b[a[i]].push_back(i);     }     k = 0;     t = 1;     for (int i = 1; i <= n && t; i++) {       if (b[k].size() == c[k]) {         t = 0;         break;       }       o.push_back(b[k][c[k]]);       c[k]++;       if (k - 2 < 0 || b[k - 2].size() == c[k - 2] ||           b[k - 1].size() == c[k - 1] || b[k].size() == c[k]) {         k++;         continue;       }       k -= 2;     }     if (t) {       cout <<  Possible  << endl;       for (int i = 0; i < o.size(); i++) {         cout << o[i] <<    ;       }       return 0;     }     k--;     for (int i = n; i >= 0; i--) {       if ((b[i].size() != c[i] && i >= k) || (b[i].size() > c[i] + 1)) {         cout <<  Impossible ;         return 0;       }       if (b[i].size() == c[i] + 1 && (i == 0 || b[i - 1].size() == c[i - 1])) {         if ((k - i + 1) % 3 != 0) {           cout <<  Impossible ;           return 0;         }         k = i;         o.push_back(b[i][c[i]]);         if (b[i + 1].size() != c[i + 1]) {           o.push_back(b[i + 1][c[i + 1]]);           k = i + 1;         }       }     }     cout <<  Possible  << endl;     for (int i = 0; i < o.size(); i++) {       cout << o[i] <<    ;     }     return 0;   }   