// i wants to take ioi
//binhtinhtutinkhongcaycunhungmotkhikhongcontutinnualatuyetvong
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nn "\n"
#define pi pair<int, int>
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define eb emplace_back
#define pb push_back
#define TASK " "
#define ms(a, x) memset(a, x, sizeof(a))
#define all(a) a.begin(), a.end()
#define All(a, n) a + 1, a + 1 + n
#define LOG 19
const int INF = 1e18;
const int mod = 1e9;
const int N = 1e5 + 5;
const int MOD = 998244353;
int bit[200000];
struct node{
int kc, u, hk;
bool operator<(const node& other) const {
return kc > other.kc;
}
};
struct edge{
int v, w, h;
};
string s;
void nhap(){
cin >> s;
}
void solve(){
map<char, int> cnt;
map<char, int> cur;
int n; cin >> n;
for(int i = 1; i <= n; i++){
char c; int x;
cin >> c >> x;
cnt[c] = x;
}
int ans = 0;
for(int i = 0; i < s.size(); i++){
if(cnt.count(s[i])){
if(cur[s[i]] == 0){
ans++;
cur[s[i]] = cnt[s[i]] - 1;
}
else{
cur[s[i]]--;
}
}
ans++;
}
cout << ans << nn;
}
signed main() {
// freopen("piggyback.in", "r", stdin);
// freopen("piggyback.out", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
nhap();
int t; cin >> t;
while(t--) solve();
return (0 ^ 0);
}
Ly8gaSB3YW50cyB0byB0YWtlIGlvaQovL2Jpbmh0aW5odHV0aW5raG9uZ2NheWN1bmh1bmdtb3RraGlraG9uZ2NvbnR1dGlubnVhbGF0dXlldHZvbmcKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgbm4gIlxuIgojZGVmaW5lIHBpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgZWIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgVEFTSyAiICIKCiNkZWZpbmUgbXMoYSwgeCkgbWVtc2V0KGEsIHgsIHNpemVvZihhKSkKI2RlZmluZSBhbGwoYSkgYS5iZWdpbigpLCBhLmVuZCgpCiNkZWZpbmUgQWxsKGEsIG4pIGEgKyAxLCBhICsgMSArIG4KCiNkZWZpbmUgTE9HIDE5CgoKY29uc3QgaW50IElORiA9IDFlMTg7CmNvbnN0IGludCBtb2QgPSAxZTk7CmNvbnN0IGludCBOID0gMWU1ICsgNTsKY29uc3QgaW50IE1PRCA9IDk5ODI0NDM1MzsKaW50IGJpdFsyMDAwMDBdOwpzdHJ1Y3Qgbm9kZXsKCWludCBrYywgdSwgaGs7Cglib29sIG9wZXJhdG9yPChjb25zdCBub2RlJiBvdGhlcikgY29uc3QgewogICAgICAgIHJldHVybiBrYyA+IG90aGVyLmtjOwogICAgfQp9OwpzdHJ1Y3QgZWRnZXsKCWludCB2LCB3LCBoOwp9OwpzdHJpbmcgczsKdm9pZCBuaGFwKCl7CiAgICBjaW4gPj4gczsKfQp2b2lkIHNvbHZlKCl7CiAgICBtYXA8Y2hhciwgaW50PiBjbnQ7CiAgICBtYXA8Y2hhciwgaW50PiBjdXI7CiAgICBpbnQgbjsgY2luID4+IG47CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgY2hhciBjOyBpbnQgeDsKICAgICAgICBjaW4gPj4gYyA+PiB4OwogICAgICAgIGNudFtjXSA9IHg7CiAgICB9CiAgICBpbnQgYW5zID0gMDsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzLnNpemUoKTsgaSsrKXsKICAgICAgICBpZihjbnQuY291bnQoc1tpXSkpewogICAgICAgICAgICBpZihjdXJbc1tpXV0gPT0gMCl7CiAgICAgICAgICAgICAgICBhbnMrKzsKICAgICAgICAgICAgICAgIGN1cltzW2ldXSA9IGNudFtzW2ldXSAtIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIGN1cltzW2ldXS0tOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFucysrOwogICAgfQogICAgY291dCA8PCBhbnMgPDwgbm47Cn0KCnNpZ25lZCBtYWluKCkgewoJLy8gZnJlb3BlbigicGlnZ3liYWNrLmluIiwgInIiLCBzdGRpbik7CgkvLyBmcmVvcGVuKCJwaWdneWJhY2sub3V0IiwgInciLCBzdGRvdXQpOwoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKCWNpbi50aWUoMCk7Cgljb3V0LnRpZSgwKTsKCW5oYXAoKTsKCWludCB0OyBjaW4gPj4gdDsKCXdoaWxlKHQtLSkgc29sdmUoKTsKCXJldHVybiAoMCBeIDApOwoKfQo=