func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename A, typename B>   ostream& operator<<(ostream& os, const pair<A, B>& p) {     return os <<  (  << p.first <<  ,   << p.second <<  ) ;   }   template <typename C>   ostream& operator<<(ostream& os, const vector<C>& v) {     for (__typeof((v).begin()) __it = (v).begin(); __it != (v).end(); __it++)       os << *(__it) <<    ;     return os;   }   const int inf = 0x3f3f3f3f;   const double eps = 1e-5;   const int maxm = 123;   const int maxn = 1024;   int ms[maxn];   int res[maxn];   int n;   bool can(int pos, int col) {     int prev = (pos + n - 1) % n;     if (res[prev] == col) return false;     int next = (pos + n + 1) % n;     if (res[next] == col) return false;     return true;   }   int main() {     int m;     cin >> n >> m;     for (int i = 0; i < m; i++) {       int t;       cin >> t;       ms[i] = t;     }     int maxpr = -1;     bool fail = false;     memset(res, 0x3f, sizeof(res));     for (int i = 0; i < n; i++) {       vector<pair<int, int> > cs;       for (int j = 0; j < m; j++)         if (ms[j] && can(i, j)) {           pair<int, int> t(ms[j], j);           if (j == maxpr) t.first += inf;           cs.push_back(t);         }       if ((int((cs).size())) == 0) {         fail = true;         break;       }       sort(cs.begin(), cs.end());       int ncolor = cs.rbegin()->second;       ms[ncolor]--;       res[i] = ncolor;       if (!i) maxpr = ncolor;     }     if (fail) {       puts( -1 );       return 0;     }     for (int i = 0; i < n; i++) cout << res[i] + 1 <<    ;     cout << endl;     return 0;   }   