This page is still under construction.

Parts of this page are still being built. What you see may change.

Shortest Accepted Word

Time limit1sMemory limit256 MB

Summary
Parse a regular expression over a, b, c and $ into a tree, then compute the shortest lexicographically smallest string each node accepts.
Level

Medium7 of 10

Topics
Dynamic programming, String, Recursion, Implementation
Solved
No attempts yet

Problem

In this problem, we consider strings consisting of lowercase Latin letters "a", "b", and "c".

A regular expression is defined recursively as follows.

  1. A single character "$" is a regular expression accepting the empty string.
  2. Single characters "a", "b", and "c" are regular expressions accepting strings "a", "b", and "c", respectively.
  3. If PP is a regular expression, "( PP )" is also a regular expression accepting all strings accepted by PP.
  4. If PP is a regular expression which is a direct result of applying any of the rules 1--4, its iteration, denoted as "PP *", is also a regular expression accepting strings of the form s=u1u2…uks = u_1 u_2 \ldots u_k (a concatenation of zero or more strings) where kk is any non-negative integer and each string uiu_i is accepted by PP.
  5. If PP and QQ are regular expressions which are direct results of applying any of the rules 1--5, their concatenation, denoted simply as "PP {} QQ", is also a regular expression accepting strings of the form s=uvs = u v (a concatenation of uu and vv, each of which may be empty) where the prefix uu is accepted by PP and the suffix vv is accepted by QQ.
  6. If PP and QQ are regular expressions which are direct results of applying any of the rules 1--6, their union, denoted as "PP | QQ", is also a regular expression accepting both strings accepted by PP and strings accepted by QQ.

The restrictions in rules 4--6 are imposed to prevent ambiguities and to prioritize operations: when reading a regular expression, evaluate iteration, then concatenation, then union. Parentheses play the usual role of prioritizing operations enclosed in them. For example, the regular expression "a(bac|ac*)" is read as "accept a followed by either (b followed by a followed by c) or (a followed by zero or more copies of c)".

Given a regular expression rr, find the shortest string ss which is accepted by this regular expression rr. If there are several such strings, find the lexicographically smallest one.

Input

The first line of input contains one integer TT, the number of test cases (1≤T≤3001 \le T \le 300).

Each of the next TT lines describes a single test case. Each test case description consists of a regular expression rr which is a string constructed by the above rules. Its length is from 1 to 300 characters.

The sum of all lengths of regular expressions is not greater than 300.

Output

For each test case print a single line containing the shortest string accepted by the given regular expression rr. If there is more than one such string, print the lexicographically smallest one.

If the answer is an empty string, print a single character "$" instead.

Examples1

  1. Example 1

    Input
    3
    a
    ab|ac*(ca|cb)
    ((ab|ac)a)*
    
    Expected output
    a
    ab
    $