func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 1e9;   const int M = 1000010;   const int MAX = M;   struct BIT {     int bit[MAX + 1], N;     BIT() {}     BIT(int N) : N(N) { memset(bit, 0, sizeof(bit)); }     int sum(int i) {       i++;       int ret = 0;       while (i) {         ret += bit[i];         i -= i & -i;       }       return ret;     }     int sum(int i, int j) { return sum(j - 1) - sum(i - 1); }     void add(int i, int x) {       i++;       while (i <= N) {         bit[i] += x;         i += i & -i;       }     }     int find(int i) {       int lb = -1, ub = N, mid;       while (ub - lb > 1) {         mid = (lb + ub) / 2;         if (sum(mid) >= i)           ub = mid;         else           lb = mid;       }       return ub;     }   };   int n, m, a[M], seq[M], k[M];   int len, ns, ms;   BIT b;   void solve() {     if (!len) {       puts( Poor stack! );       return;     }     b = BIT(ns);     for (int i = (int)(0); i < (int)(ns); i++) b.add(i, 1);     for (int i = (int)(0); i < (int)(ms); i++) {       for (int j = k[i] - 1; j >= 0; --j) {         int pos = b.find(a[j]);         b.add(pos, -1);       }     }     for (int i = (int)(0); i < (int)(ns); i++)       if (b.sum(i, i + 1)) printf( %d , seq[i]);     puts(  );   }   void input() {     scanf( %d%d , &n, &m);     for (int i = (int)(0); i < (int)(m); i++) scanf( %d , a + i);     for (int i = (int)(0); i < (int)(n); i++) {       scanf( %d , seq + ns);       if (seq[ns] < 0) {         if (a[0] > len) continue;         k[ms] = lower_bound(a, a + m, len + 1) - a;         len -= k[ms++];       } else         ++len, ++ns;     }   }   int main() {     input();     solve();     return 0;   }   