#include #include #include using namespace std; int main() { size_t n, q; cin >> n >> q; list str = list(); // Load string char s; for (size_t i = 0; i < n; i++) { cin >> s; str.push_back(s); } // Load cases for (size_t i = 0; i < q; i++) { size_t len; cin >> len; vector query; // Load query char qc; for (size_t l = 0; l < len; l++) { cin >> qc; query.push_back(qc); } // Number of removed strings size_t removed = 0; // Current index in query size_t index = 0; auto start = str.begin(); auto end = str.begin(); auto iter = str.begin(); for (; iter != str.end(); iter++) { // After last match if (index == query.size()) { end = iter; str.erase(start, end); index = 0; // Note that we've removed something removed++; } if (*iter == query[index]) { // First match if (index == 0) start = iter; index++; } else { index = 0; if (*iter == query[index]) { // First match start = iter; index++; } } } if (index == query.size()) { str.erase(start, iter); removed++; } cout << removed << endl; // for (auto &c : str) // cout << c; // // cout << endl; } return 0; }