func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 2e9;   const long double eps = 0.000001;   const long long mod = 1e9 + 7;   const long double PI = 3.14159265359;   template <class T>   struct MyVector : vector<T> {     MyVector() : vector<T>() {}     MyVector(int n) : vector<T>(n) {}     T &operator[](size_t i) { return vector<T>::at(i); }   };   string t;   string p;   vector<int> a;   bool check(int m) {     vector<int> u((int)t.size(), false);     for (int i = 0; i < m; i++) {       u[a[i]] = true;     }     string ns;     for (int i = 0; i < (int)t.size(); i++) {       if (u[i]) continue;       ns.push_back(t[i]);     }     int idx = 0;     for (int i = 0; i < (int)p.size(); i++) {       bool fl = false;       for (; idx < (int)ns.size(); idx++) {         if (ns[idx] == p[i]) {           idx++;           fl = true;           break;         }       }       if (!fl) return false;     }     return true;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     cout.tie(nullptr);     cin >> t >> p;     a.resize((int)t.size());     for (int i = 0; i < (int)t.size(); i++) {       cin >> a[i];       a[i]--;     }     int l = -1, r = (int)t.size() + 1;     while (r - l > 1) {       int m = (l + r) / 2;       if (check(m))         l = m;       else         r = m;     }     cout << l;     return 0;   }   