Under a grammar given below, strings can represent a set of lowercase words. Let's use
R(expr) to denote the set of words the expression
represents.
Grammar can best be understood through simple examples:
R("a") = {"a"}R("w") = {"w"}R("{a,b,c}") =
{"a","b","c"}R("{{a,b},{b,c}}") =
{"a","b","c"} (notice the final set
only contains each word at most once)
R("{a,b}{c,d}") = {"ac","ad","bc","bd"}
R("a{b,c}{d,e}f{g,h}") = {"abdfg", "abdfh",
"abefg", "abefh", "acdfg", "acdfh",
"acefg", "acefh"}Formally, the 3 rules for our grammar:
x, we have R(x) = {x}e_1, e_2, ... , e_k with k >= 2, we
have R({e_1,e_2,...}) = R(e_1) ∪ R(e_2) ∪ ...e_1 and e_2, we have R(e_1 + e_2) =
{a + b for (a, b) in R(e_1) × R(e_2)}, where + denotes
concatenation, and × denotes the cartesian product.
Given an expression representing a set of words under the given grammar, return
the sorted list of words that the expression represents.
Example 1:
Input: "{a,b}{c,{d,e}}" Output: ["ac","ad","ae","bc","bd","be"]
Example 2:
Input: "{{a,z},a{b,c},{ab,z}}" Output: ["a","ab","ac","z"] Explanation: Each distinct word is written only once in the final answer.
Constraints:
1 <= expression.length <= 60expression[i] consists of '{',
'}', ','or lowercase English letters.
expression represents a set of words based on
the
grammar given in the description.