#include <bits/stdc++.h>
#pragma GCC optimize - O3
using namespace std;
using ll = int64_t;
using ld = double;
using ull = uint64_t;
using Hash = ull;
const Hash HSH = 237;
const int N = 100228;
int id[N];
int revid[N];
pair<int, int> p[N];
int a[4 * N];
vector<int> tr[4 * N];
void build(int v, int l, int r) {
  for (int i = l; i < r; ++i) {
    tr[v].push_back(revid[i]);
  }
  tr[v].push_back(N);
  sort(tr[v].begin(), tr[v].end());
  if (l == r - 1) {
    return;
  }
  int md = (l + r) / 2;
  build(v * 2, l, md);
  build(v * 2 + 1, md, r);
}
int query(int v, int l, int r, int lx, int rx, int lb) {
  if (l >= rx || lx >= r) {
    return N;
  }
  if (lx <= l && r <= rx) {
    return *lower_bound(tr[v].begin(), tr[v].end(), lb);
  }
  int md = (l + r) / 2;
  return min(query(v * 2, l, md, lx, rx, lb),
             query(v * 2 + 1, md, r, lx, rx, lb));
}
int bound(int l, int r, int ind, int x) {
  while (l < r) {
    int md = (l + r) / 2;
    if (a[id[md] + ind] >= x) {
      r = md;
    } else {
      l = md + 1;
    }
  }
  return l;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  cout.setf(ios::fixed);
  cout.precision(20);
  string s;
  cin >> s;
  int n = s.length();
  for (int i = 0; i < n; ++i) {
    a[i] = s[i] - 'a' + 1;
    revid[i] = a[i];
    id[i] = i;
  }
  for (int i = 1; i <= n; i *= 2) {
    for (int j = 0; j < n; ++j) {
      p[j].first = revid[j];
      int nj = j + i;
      if (nj >= n) {
        p[j].second = -1;
      } else {
        p[j].second = revid[nj];
      }
    }
    sort(id, id + n, [&](int x, int y) { return p[x] < p[y]; });
    int cv = 0;
    for (int i = 0; i < n; ++i) {
      cv += (i != 0) && (p[id[i]] != p[id[i - 1]]);
      revid[id[i]] = cv;
    }
  }
  build(1, 0, n);
  int m;
  cin >> m;
  for (int i = 0; i < m; ++i) {
    int ls, rs;
    cin >> ls >> rs;
    --ls;
    string st;
    cin >> st;
    int qn = st.length();
    int l = 0, r = n;
    int ans = -1;
    int len = -1;
    for (int j = 0; j <= qn; ++j) {
      int x = 0;
      if (j < qn) {
        x = st[j] - 'a' + 1;
      }
      int nr = bound(l, r, j, x + 1);
      int qv = query(1, 0, n, ls, rs, nr);
      if (qv < r) {
        ans = qv;
        len = j;
      }
      r = nr;
      l = bound(l, r, j, x);
      if (--rs <= ls) {
        break;
      }
    }
    if (ans == -1) {
      cout << -1 << "\n";
    } else {
      for (int j = 0; j <= len; ++j) {
        cout << s[id[ans] + j];
      }
      cout << "\n";
    }
  }
}
