func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1000500;   typedef struct treap *ptreap;   struct treap {     int v, c, y;     ptreap l, r;     treap() {}     treap(int v) : v(v), c(1), y(rand()), l(0), r(0) {}   };   int cnt(ptreap t) { return t ? t->c : 0; }   void recalc(ptreap t) {     if (t) t->c = cnt(t->l) + cnt(t->r) + 1;   }   void split(ptreap t, int key, ptreap &l, ptreap &r) {     if (!t) {       l = r = 0;       return;     }     int cur_key = cnt(t->l);     if (key < cur_key) {       split(t->l, key, l, t->l);       r = t;     } else {       split(t->r, key - cur_key - 1, t->r, r);       l = t;     }     recalc(t);   }   void merge(ptreap l, ptreap r, ptreap &t) {     if (!l || !r) {       t = l ? l : r;       return;     }     if (l->y < r->y) {       merge(l->r, r, l->r);       t = l;     } else {       merge(l, r->l, r->l);       t = r;     }     recalc(t);   }   void print(ptreap t) {     if (!t) return;     print(t->l);     cout << t->v;     print(t->r);   }   int n, m, val, r, cur, a[maxn];   ptreap t;   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     srand(time(0));     cin >> n >> m;     for (int i = 0; i < m; ++i) {       cin >> a[i];       --a[i];     }     for (int i = 0; i < n; ++i) {       cin >> val;       if (val == -1) {         for (int j = 0; j < r; ++j) {           ptreap q, w;           split(t, a[j] - j, q, t);           split(q, a[j] - j - 1, w, q);           merge(w, t, t);         }         cur -= r;         while (r > 0 && a[r - 1] > cur - 1) --r;       } else {         ptreap tmp = new treap(val);         merge(t, tmp, t);         ++cur;         if (a[r] == cur - 1) ++r;       }     }     if (!cur)       cout <<  Poor stack! ;     else       print(t);     return 0;   }   