Problem:
Max Score: 250 Points

Problem Statement

Mr.X, who the handle name is T, looked at the list which written N handle names, S_1, S_2, ..., S_N.

But he couldn't see some parts of the list. Invisible part is denoted ?.

Please calculate all possible index of the handle name of Mr.X when you sort N+1 handle names (S_1, S_2, ..., S_N and T) in lexicographical order.

Note: If there are pair of people with same handle name, either one may come first.

Input

The input is given from standard input in the following format.

N
S_1
S_2
:
S_N
T

Output

Calculate the possible index and print in sorted order. The output should be separated with a space. Don't print a space after last number.

Put a line break in the end.

Constraints

1 ≤ N ≤ 10000

1 ≤ |S_i|, |T| ≤ 20 (|A| is the length of A.)

S_i consists from lower-case alphabet and ?.

T consists from lower-case alphabet.

Scoring

Subtask 1 [ 130 points ]

There are no ?'s.

Subtask 2 [ 120 points ]

There are no additional constraints.

Sample Input 1

2
tourist
petr
e

Sample Output 1

1

There are no invisible part, so there are only one possibility.
The sorted handle names are e, petr, tourist, so e comes first.

Sample Input 2

2
?o?r?s?
?et?
e

Solution in C# (Mono 4.6.2.0) (judge verdict: Runtime Error)

using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;

class P
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        List<string> _ = new List<string>();
        string t = "";
        int cnt = 0;
        for (int i = 0; i < n+1; i++)
        {
            string l = Console.ReadLine();
            if (l.Contains('?'))
            {
                cnt++;
                _.Add(l.Replace('?', 'a'));
                _.Add(l.Replace('?', 'z'));
            }
            else
            {
                _.Add(l);
            }
        }
        t = _.Last();
        _.Sort();

        int ans = _.BinarySearch(t);
        
        if (1 == _.Where(a=>a.Equals(t)).Count() && cnt == 0)
        {
            Console.WriteLine(ans + 1);
        }
        else
        {
            if (cnt == 0)
            {
                string line = "";
                for (int i = 1; i <= n + 1; i++)
                {
                    if (_[i].Equals(t))
                    {
                        line += $"{ i } ";
                    }
                }
                line.Remove(line.Length - 1, 1);
                Console.WriteLine(line);
            }
            else
            {
                if (ans == 2 * n)
                {
                    Console.WriteLine(n + 1);
                }
                else if (ans == 0)
                {
                    Console.WriteLine(1);
                }
                else
                {
                    string line = "";
                    for (int i = 1; i <= ans + 1; i++)
                    {
                        line += $"{ i } ";
                    }
                    line.Remove(line.Length - 1, 1);
                    Console.WriteLine(line);
                }
            }
        }
    }
}