func_code_string: #include <bits/stdc++.h>   #pragma optimization_level 3   #pragma GCC optimize( Ofast,no-stack-protector,unroll-loops,fast-math,O3 )   #pragma GCC target( sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx )   using namespace std;   const long long N = 1e6 + 5;   const long long mod = 1e9 + 7;   const long long INF = 0x7f7f7f7f7f7f7f7f;   const int INFi = 0x7f7f7f7f;   long long test = 1, n, m, a[N], sz = 0, tot, ch[N];   string second =  0 ;   long long tree[N] = {};   void update(int idx, int val) {     idx++;     while (idx <= N - 1) {       tree[idx] += val;       idx += idx & (-idx);     }   }   long long query(int idx) {     idx++;     long long sum = 0;     while (idx > 0) {       sum += tree[idx];       idx -= idx & (-idx);     }     return sum;   }   int bs(int x) {     int l = 1, r = N - 1, ans = 0;     while (l <= r) {       int mid = (l + r) / 2;       if (query(mid) >= x) {         ans = mid;         r = mid - 1;       } else         l = mid + 1;     }     return ans;   }   void solve() {     cin >> n >> m;     for (int i = 1; i <= m; i++) cin >> a[i];     for (int i = 1; i <= n; i++) {       int x;       cin >> x;       if (x == -1) {         vector<long long> v;         for (int i = 1; i <= m; i++) {           if (a[i] > sz) break;           v.push_back(bs(a[i]));         }         sz -= v.size();         for (auto it : v) ch[it] = 0, update(it, -1);       } else {         second += x +  0 ;         sz++, tot++;         update(tot, 1);         ch[tot] = 1;       }     }     if (sz == 0)       cout <<  Poor stack!             <<   n ;     else {       for (int i = 1; i <= tot; i++) {         if (ch[i] == 1) cout << second[i];       }       cout <<   n ;       ;     }   }   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     cout << fixed;     cout << setprecision(15);     ;     for (int i = 1; i <= test; i++) {       solve();     }   }   