// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
template<class T>
bool minimize(T &a, const T &b) {
if (a > b) return a = b, true;
return false;
}
template<class T>
bool maximize(T &a, const T &b) {
if (a < b) return a = b, true;
return false;
}
#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "anctext"
/*END OF TEMPLATE. ICEBEAR AND THE CAT WILL WIN VOI26 */
const int MOD = 1e9 + 2277;
const int inf = 1e9 + 27092008;
const ll INF = 1e18 + 27092008;
const int N = 5e5 + 5;
const int base = 256;
string str;
int numStr, lenStr, numQuery, power[N], hs[N];
int sorted[N], numDiff;
struct Node {
int depth, end_index, hashValue;
Node *child[26], *par[20];
char current_char;
Node() {
depth = hashValue = 0;
end_index = -1;
REP(j, 20) par[j] = NULL;
REP(j, 26) child[j] = NULL;
current_char = '?';
}
} *end_node[N];
struct Trie {
Node *root;
Trie () {
root = new Node();
REP(j, 20) root -> par[j] = root;
end_node[0] = root;
}
void addStr(Node *p, int index, string &s) {
for(char c : s) {
int pos = c - 'a';
if (p -> child[pos] == NULL) {
p -> child[pos] = new Node();
p -> child[pos] -> hashValue = (1LL * (p -> hashValue) * base + c) % MOD;
p -> child[pos] -> depth = p -> depth + 1;
p -> child[pos] -> current_char = c;
p -> child[pos] -> par[0] = p;
FOR(j, 1, 19) p -> child[pos] -> par[j] = (p -> child[pos] -> par[j - 1]) -> par[j - 1];
}
p = p -> child[pos];
}
if (p -> end_index == -1) p -> end_index = index;
end_node[index] = p;
}
void DFS(Node *p) {
if (p -> end_index != -1) sorted[++numDiff] = p -> end_index;
REP(pos, 26) if (p -> child[pos] != NULL)
DFS(p -> child[pos]);
}
} trie;
int getHash(int l, int r) {
return (hs[r] - 1LL * hs[l - 1] * power[r - l + 1] % MOD + MOD) % MOD;
}
bool check(int pos, int L, int R) {
Node *p = end_node[pos];
int lenS = R - L + 1;
if (p -> depth <= lenS && p -> hashValue == getHash(L, L + p -> depth - 1)) return true;
RED(j, 20) {
int lenT = p -> par[j] -> depth;
if (lenT > lenS || ((p -> par[j] -> hashValue) != getHash(L, L + lenT - 1))) p = p -> par[j];
}
return (p -> depth <= lenS && p -> current_char < str[L + p -> depth - 1]);
}
void init(void) {
int subtask; cin >> subtask;
cin >> str >> numStr;
lenStr = (int)str.size();
str = " " + str;
power[0] = 1;
FOR(i, 1, lenStr) {
hs[i] = (1LL * hs[i - 1] * base + str[i]) % MOD;
power[i] = 1LL * power[i - 1] * base % MOD;
}
}
void process(void) {
FOR(i, 1, numStr) {
int parent; string more;
cin >> parent >> more;
trie.addStr(end_node[parent], i, more);
}
trie.DFS(trie.root);
cin >> numQuery;
while(numQuery--) {
int l, r;
cin >> l >> r;
int low = 1, high = numDiff, res = -1;
while(low <= high) {
int mid = (low + high) >> 1;
if (check(sorted[mid], l, r)) res = sorted[mid], low = mid + 1;
else high = mid - 1;
}
cout << res << '\n';
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int tc = 1;
// cin >> tc;
while(tc--) {
init();
process();
}
return 0;
}
Ly8gfn4gaWNlYmVhciB+fgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwp0eXBlZGVmIHBhaXI8aW50LCBpaT4gaWlpOwoKdGVtcGxhdGU8Y2xhc3MgVD4KICAgIGJvb2wgbWluaW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgICAgIGlmIChhID4gYikgcmV0dXJuIGEgPSBiLCB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCnRlbXBsYXRlPGNsYXNzIFQ+CiAgICBib29sIG1heGltaXplKFQgJmEsIGNvbnN0IFQgJmIpIHsKICAgICAgICBpZiAoYSA8IGIpIHJldHVybiBhID0gYiwgdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgRk9SUihpLGEsYikgZm9yKGludCBpPShhKTsgaT49KGIpOyAtLWkpCiNkZWZpbmUgUkVQKGksIG4pIGZvcihpbnQgaT0wOyBpPChuKTsgKytpKQojZGVmaW5lIFJFRChpLCBuKSBmb3IoaW50IGk9KG4pLTE7IGk+PTA7IC0taSkKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIEJJVChTLCBpKSAoKChTKSA+PiAoaSkpICYgMSkKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSB0YXNrICJhbmN0ZXh0IgovKkVORCBPRiBURU1QTEFURS4gSUNFQkVBUiBBTkQgVEhFIENBVCBXSUxMIFdJTiBWT0kyNiAqLwoKY29uc3QgaW50IE1PRCA9IDFlOSArIDIyNzc7CmNvbnN0IGludCBpbmYgPSAxZTkgKyAyNzA5MjAwODsKY29uc3QgbGwgSU5GID0gMWUxOCArIDI3MDkyMDA4Owpjb25zdCBpbnQgTiA9IDVlNSArIDU7CmNvbnN0IGludCBiYXNlID0gMjU2OwpzdHJpbmcgc3RyOwppbnQgbnVtU3RyLCBsZW5TdHIsIG51bVF1ZXJ5LCBwb3dlcltOXSwgaHNbTl07CmludCBzb3J0ZWRbTl0sIG51bURpZmY7CgpzdHJ1Y3QgTm9kZSB7CiAgICBpbnQgZGVwdGgsIGVuZF9pbmRleCwgaGFzaFZhbHVlOwogICAgTm9kZSAqY2hpbGRbMjZdLCAqcGFyWzIwXTsKICAgIGNoYXIgY3VycmVudF9jaGFyOwogICAgTm9kZSgpIHsKICAgICAgICBkZXB0aCA9IGhhc2hWYWx1ZSA9IDA7CiAgICAgICAgZW5kX2luZGV4ID0gLTE7CiAgICAgICAgUkVQKGosIDIwKSBwYXJbal0gPSBOVUxMOwogICAgICAgIFJFUChqLCAyNikgY2hpbGRbal0gPSBOVUxMOwogICAgICAgIGN1cnJlbnRfY2hhciA9ICc/JzsKICAgIH0KfSAqZW5kX25vZGVbTl07CgpzdHJ1Y3QgVHJpZSB7CiAgICBOb2RlICpyb290OwogICAgVHJpZSAoKSB7CiAgICAgICAgcm9vdCA9IG5ldyBOb2RlKCk7CiAgICAgICAgUkVQKGosIDIwKSByb290IC0+IHBhcltqXSA9IHJvb3Q7CiAgICAgICAgZW5kX25vZGVbMF0gPSByb290OwogICAgfQoKICAgIHZvaWQgYWRkU3RyKE5vZGUgKnAsIGludCBpbmRleCwgc3RyaW5nICZzKSB7CiAgICAgICAgZm9yKGNoYXIgYyA6IHMpIHsKICAgICAgICAgICAgaW50IHBvcyA9IGMgLSAnYSc7CiAgICAgICAgICAgIGlmIChwIC0+IGNoaWxkW3Bvc10gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgcCAtPiBjaGlsZFtwb3NdID0gbmV3IE5vZGUoKTsKCiAgICAgICAgICAgICAgICBwIC0+IGNoaWxkW3Bvc10gLT4gaGFzaFZhbHVlID0gKDFMTCAqIChwIC0+IGhhc2hWYWx1ZSkgKiBiYXNlICsgYykgJSBNT0Q7CiAgICAgICAgICAgICAgICBwIC0+IGNoaWxkW3Bvc10gLT4gZGVwdGggPSBwIC0+IGRlcHRoICsgMTsKICAgICAgICAgICAgICAgIHAgLT4gY2hpbGRbcG9zXSAtPiBjdXJyZW50X2NoYXIgPSBjOwoKICAgICAgICAgICAgICAgIHAgLT4gY2hpbGRbcG9zXSAtPiBwYXJbMF0gPSBwOwogICAgICAgICAgICAgICAgRk9SKGosIDEsIDE5KSBwIC0+IGNoaWxkW3Bvc10gLT4gcGFyW2pdID0gKHAgLT4gY2hpbGRbcG9zXSAtPiBwYXJbaiAtIDFdKSAtPiBwYXJbaiAtIDFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHAgPSBwIC0+IGNoaWxkW3Bvc107CiAgICAgICAgfQoKICAgICAgICBpZiAocCAtPiBlbmRfaW5kZXggPT0gLTEpIHAgLT4gZW5kX2luZGV4ID0gaW5kZXg7CiAgICAgICAgZW5kX25vZGVbaW5kZXhdID0gcDsKICAgIH0KCiAgICB2b2lkIERGUyhOb2RlICpwKSB7CiAgICAgICAgaWYgKHAgLT4gZW5kX2luZGV4ICE9IC0xKSBzb3J0ZWRbKytudW1EaWZmXSA9IHAgLT4gZW5kX2luZGV4OwogICAgICAgIFJFUChwb3MsIDI2KSBpZiAocCAtPiBjaGlsZFtwb3NdICE9IE5VTEwpCiAgICAgICAgICAgIERGUyhwIC0+IGNoaWxkW3Bvc10pOwogICAgfQp9IHRyaWU7CgppbnQgZ2V0SGFzaChpbnQgbCwgaW50IHIpIHsKICAgIHJldHVybiAoaHNbcl0gLSAxTEwgKiBoc1tsIC0gMV0gKiBwb3dlcltyIC0gbCArIDFdICUgTU9EICsgTU9EKSAlIE1PRDsKfQoKYm9vbCBjaGVjayhpbnQgcG9zLCBpbnQgTCwgaW50IFIpIHsKICAgIE5vZGUgKnAgPSBlbmRfbm9kZVtwb3NdOwogICAgaW50IGxlblMgPSBSIC0gTCArIDE7CiAgICBpZiAocCAtPiBkZXB0aCA8PSBsZW5TICYmIHAgLT4gaGFzaFZhbHVlID09IGdldEhhc2goTCwgTCArIHAgLT4gZGVwdGggLSAxKSkgcmV0dXJuIHRydWU7CgogICAgUkVEKGosIDIwKSB7CiAgICAgICAgaW50IGxlblQgPSBwIC0+IHBhcltqXSAtPiBkZXB0aDsKICAgICAgICBpZiAobGVuVCA+IGxlblMgfHwgKChwIC0+IHBhcltqXSAtPiBoYXNoVmFsdWUpICE9IGdldEhhc2goTCwgTCArIGxlblQgLSAxKSkpIHAgPSBwIC0+IHBhcltqXTsKICAgIH0KCiAgICByZXR1cm4gKHAgLT4gZGVwdGggPD0gbGVuUyAmJiBwIC0+IGN1cnJlbnRfY2hhciA8IHN0cltMICsgcCAtPiBkZXB0aCAtIDFdKTsKfQoKdm9pZCBpbml0KHZvaWQpIHsKICAgIGludCBzdWJ0YXNrOyBjaW4gPj4gc3VidGFzazsKICAgIGNpbiA+PiBzdHIgPj4gbnVtU3RyOwogICAgbGVuU3RyID0gKGludClzdHIuc2l6ZSgpOwogICAgc3RyID0gICIgIiArIHN0cjsKICAgIHBvd2VyWzBdID0gMTsKICAgIEZPUihpLCAxLCBsZW5TdHIpIHsKICAgICAgICBoc1tpXSA9ICgxTEwgKiBoc1tpIC0gMV0gKiBiYXNlICsgc3RyW2ldKSAlIE1PRDsKICAgICAgICBwb3dlcltpXSA9IDFMTCAqIHBvd2VyW2kgLSAxXSAqIGJhc2UgJSBNT0Q7CiAgICB9Cn0KCnZvaWQgcHJvY2Vzcyh2b2lkKSB7CiAgICBGT1IoaSwgMSwgbnVtU3RyKSB7CiAgICAgICAgaW50IHBhcmVudDsgc3RyaW5nIG1vcmU7CiAgICAgICAgY2luID4+IHBhcmVudCA+PiBtb3JlOwogICAgICAgIHRyaWUuYWRkU3RyKGVuZF9ub2RlW3BhcmVudF0sIGksIG1vcmUpOwogICAgfQoKICAgIHRyaWUuREZTKHRyaWUucm9vdCk7CgogICAgY2luID4+IG51bVF1ZXJ5OwogICAgd2hpbGUobnVtUXVlcnktLSkgewogICAgICAgIGludCBsLCByOwogICAgICAgIGNpbiA+PiBsID4+IHI7CiAgICAgICAgaW50IGxvdyA9IDEsIGhpZ2ggPSBudW1EaWZmLCByZXMgPSAtMTsKICAgICAgICB3aGlsZShsb3cgPD0gaGlnaCkgewogICAgICAgICAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpID4+IDE7CiAgICAgICAgICAgIGlmIChjaGVjayhzb3J0ZWRbbWlkXSwgbCwgcikpIHJlcyA9IHNvcnRlZFttaWRdLCBsb3cgPSBtaWQgKyAxOwogICAgICAgICAgICBlbHNlIGhpZ2ggPSBtaWQgLSAxOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IHJlcyA8PCAnXG4nOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3Blbih0YXNrIi5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3Blbih0YXNrIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKHRhc2siLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGludCB0YyA9IDE7Ci8vICAgIGNpbiA+PiB0YzsKICAgIHdoaWxlKHRjLS0pIHsKICAgICAgICBpbml0KCk7CiAgICAgICAgcHJvY2VzcygpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K