Gluing Pictures

Interview

Time limit0.3sMemory limit512 MB

Summary
Given a city string C, find for each friend name the fewest substrings of C that concatenate to form it, or -1 if impossible.
Level

Medium6 of 10

Topics
Dynamic programming, String matching, Trie, Greedy
Solved
No attempts yet

Problem

Enzo recently traveled to the city of Montevideo, where he saw a big sign with the name of the city. He decided to take pictures of the sign to make a collage and send it to his friend Demonio. Enzo wants to form the name of his friend by taking one or several pictures of sections of the sign. For example, with the string "MONTEVIDEO", he might form the name of his friend by putting together "DE-MON-I-O", using four pictures to form the entire name. It is easy to show that the result cannot be achieved with fewer pictures.

You will be given the name of a city and a list of friends' names. Return the minimum number of pictures needed to form the name of each friend. When forming the names, pictures cannot be rotated, reflected or modified in any way.

Input

The first line contains a string CC indicating the name of the city. The second line contains a positive integer NN representing the number of friends. Each of the following NN lines contains a string indicating the name of a friend. All strings are non-empty and consist only of uppercase letters. The sum of the lengths of all strings is at most 2×1052 \times 10^5.

Output

Output NN lines, each line with an integer indicating the minimum number of needed pictures to form the corresponding name in the input, or the value "-1" if it is not possible to generate the name.

Examples2

  1. Example 1

    Input
    MONTEVIDEO
    4
    DEMONIO
    MONTE
    EDIT
    WON
    
    Expected output
    4
    1
    4
    -1
    
  2. Example 2

    Input
    SANTIAGO
    3
    TITA
    SANTIAGO
    NAS
    
    Expected output
    3
    1
    3