#include <bits/stdc++.h>
using namespace std;
string s;
vector<int> v[27 * 27 * 27 * 27 + 5];
map<pair<int, int>, int> dp;
int _hash(int l, int r) {
  int res = 0;
  for (int i = l; i < r + 1; i++) res = res * 27 + s[i] - 'a' + 1;
  return res;
}
int _hash(string &x) {
  int res = 0;
  for (int i = 0; i < x.size(); i++) res = res * 27 + x[i] - 'a' + 1;
  return res;
}
void pre() {
  for (int i = 0; i < s.size(); i++) {
    for (int j = 0; j < 4 && i - j >= 0; j++) {
      int h = _hash(i - j, i);
      v[h].push_back(i - j);
    }
  }
}
int solve(int x, int y, int a, int b) {
  int res = 1000000;
  if (!v[x].size() || !v[y].size()) return -1;
  int id1 = 0;
  int id2 = 0;
  while (1) {
    res =
        min(res, max(v[x][id1] + a, v[y][id2] + b) - min(v[x][id1], v[y][id2]));
    if (v[x][id1] <= v[y][id2]) {
      id1++;
    } else {
      id2++;
    }
    if (id1 == v[x].size()) break;
    if (id2 == v[y].size()) break;
  }
  return res;
}
int main() {
  cin >> s;
  pre();
  int q;
  scanf("%d", &q);
  while (q--) {
    string a, b;
    cin >> a >> b;
    int x = _hash(a);
    int y = _hash(b);
    if (x > y) {
      swap(x, y);
      swap(a, b);
    }
    pair<int, int> p(x, y);
    int &res = dp[p];
    if (!res) res = solve(x, y, a.size(), b.size());
    printf("%d\n", res);
  }
  return 0;
}
