← Home
package main

import (
	"bufio"
	"os"
	"strconv"
)

func getID(s string) int {
	id := 0
	for i := 0; i < len(s); i++ {
		id = id*27 + int(s[i]-'a'+1)
	}
	return id
}

func search(a []int, x int) int {
	l, r := 0, len(a)
	for l < r {
		m := l + (r-l)/2
		if a[m] < x {
			l = m + 1
		} else {
			r = m
		}
	}
	return l
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	buf := make([]byte, 1000000)
	scanner.Buffer(buf, 1000000)

	if !scanner.Scan() {
		return
	}
	s := scanner.Text()

	if !scanner.Scan() {
		return
	}
	q, _ := strconv.Atoi(scanner.Text())

	pos := make([][]int, 531442)

	n := len(s)
	for i := 0; i < n; i++ {
		id := 0
		for j := 0; j < 4 && i+j < n; j++ {
			id = id*27 + int(s[i+j]-'a'+1)
			pos[id] = append(pos[id], i)
		}
	}

	memo := make(map[uint64]int)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	for k := 0; k < q; k++ {
		if !scanner.Scan() {
			break
		}
		a := scanner.Text()
		if !scanner.Scan() {
			break
		}
		b := scanner.Text()

		idA := getID(a)
		idB := getID(b)

		if len(pos[idA]) == 0 || len(pos[idB]) == 0 {
			writer.WriteString("-1\n")
			continue
		}

		if idA == idB {
			writer.WriteString(strconv.Itoa(len(a)) + "\n")
			continue
		}

		key := (uint64(idA) << 32) | uint64(idB)
		if val, ok := memo[key]; ok {
			writer.WriteString(strconv.Itoa(val) + "\n")
			continue
		}

		arrA := pos[idA]
		arrB := pos[idB]
		lenA := len(a)
		lenB := len(b)

		if len(arrA) > len(arrB) {
			arrA, arrB = arrB, arrA
			lenA, lenB = lenB, lenA
		}

		ans := 1000000000
		for _, u := range arrA {
			idx := search(arrB, u)
			if idx > 0 {
				v := arrB[idx-1]
				end := u + lenA
				if v+lenB > end {
					end = v + lenB
				}
				start := u
				if v < start {
					start = v
				}
				if end-start < ans {
					ans = end - start
				}
			}
			if idx < len(arrB) {
				v := arrB[idx]
				end := u + lenA
				if v+lenB > end {
					end = v + lenB
				}
				start := u
				if v < start {
					start = v
				}
				if end-start < ans {
					ans = end - start
				}
			}
		}

		memo[key] = ans
		writer.WriteString(strconv.Itoa(ans) + "\n")
	}
}