func_code_string: #include <bits/stdc++.h>   const long long INF = (long long)1e18 + 123;   const int inf = (int)2e9 + 123;   const int mod = 1e9 + 7;   using namespace std;   int n, m, d[8000011], a[1000011], b[1000011];   void upd(int id, int x, int v = 1, int tl = 1, int tr = 1000000) {     if (tl > id || tr < id) return;     if (tl == tr) {       d[v] = x;       return;     }     int mid = (tl + tr) / 2;     upd(id, x, v * 2, tl, mid);     upd(id, x, v * 2 + 1, mid + 1, tr);     d[v] = d[v * 2] + d[v * 2 + 1];   }   int get(int x, int v = 1, int tl = 1, int tr = 1000000) {     if (tl == tr) return tl;     int mid = (tl + tr) / 2;     if (d[v * 2] >= x) {       return get(x, v * 2, tl, mid);     } else       return get(x - d[v * 2], v * 2 + 1, mid + 1, tr);   }   int get_id(int id, int v = 1, int tl = 1, int tr = 1000000) {     if (tl == tr) return d[v];     int mid = (tl + tr) / 2;     if (id <= mid)       return get_id(id, v * 2, tl, mid);     else       return get_id(id, v * 2 + 1, mid + 1, tr);   }   int size = 0;   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cin >> m >> n;     vector<int> v;     for (int i = 1; i <= n; i++) {       cin >> b[i];     }     for (int i = 1; i <= m; i++) {       int type;       cin >> type;       if (type == -1) {         int SZ = d[1];         for (int j = 1; j <= n; j++) {           if (b[j] > SZ) break;           upd(get(b[j] - j + 1), 0);         }       } else {         a[++size] = type;         upd(size, 1);       }     }     for (int i = 1; i <= size; i++) {       if (get_id(i) > 0) v.push_back(a[i]);     }     if (!v.size()) {       cout <<  Poor stack! ;       return 0;     }     for (int i = 0; i < v.size(); i++) {       cout << v[i];     }     return 0;   }   