def make_sa(s): n = len(s) sa = list(range(n)) ra = [ord(s[i]) for i in range(n)] k, maxi = 1, max(300, n) while k < n: for kk in [k, 0]: c = [0]*maxi for i in range(n): c[ra[i+kk] if i+kk 1: i //= 2; a[i] = min(a[2*i], a[2*i+1]) def rmq(a, i, j): x = 10**9 while i < j: if i%2 == 0: i //= 2 else: x = min(x, a[i]); i = i//2 + 1 if j%2 == 0: j //= 2 else: x = min(x, a[j-1]); j //= 2 return x import sys; input = sys.stdin.readline; from array import * s = input().strip(); n = len(s); sa = make_sa(s+'\0'); lcp = make_lcp(s, sa); r = array('i', [0]*2*n); m = array('i', [0]*n) for i in range(n): m[sa[i]] = i; update(r, i+n, lcp[i]) for _ in range(int(input())): a, b = map(int, input().split()); print(rmq(r, min(m[a], m[b])+n+1, max(m[a], m[b])+n+1))