import java.util.regex.*;
import java.util.*;
class T {
public static String join
(String sep, Iterable
<String
> it
) { boolean first = true;
if (first)
first = false;
else
joined += sep;
joined += s;
}
return joined;
}
public static Iterable
<String
> split
(String s
) { List<String> result = new LinkedList<String>();
Stack<String> stack = new Stack<String>();
Pattern pattern = Pattern.compile("[,\\[\\]]|.+?");
Matcher matcher = pattern.matcher(s);
stack.push("");
while (matcher.find()) {
String token
= matcher.
group(); if (token.equals("[")) {
stack.push("");
} else if (token.equals("]")) {
if (! stack.peek().isEmpty())
result.add(join(".", stack));
stack.pop();
stack.pop();
stack.push("");
} else if (token.equals(",")) {
if (! stack.peek().isEmpty())
result.add(join(".", stack));
} else {
stack.pop();
stack.push(token);
}
}
if (! (stack.isEmpty() || stack.peek().isEmpty()))
result.add(join(".", stack));
return result;
}
public static void main
(String[] args
) { String text
= "a,b,c[a,b,c[a]],d"; }
}
aW1wb3J0IGphdmEudXRpbC5yZWdleC4qOwppbXBvcnQgamF2YS51dGlsLio7CgpjbGFzcyBUIHsKICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGpvaW4oU3RyaW5nIHNlcCwgSXRlcmFibGU8U3RyaW5nPiBpdCkgewogICAgICAgIFN0cmluZyBqb2luZWQgPSAiIjsKICAgICAgICBib29sZWFuIGZpcnN0ID0gdHJ1ZTsKCiAgICAgICAgZm9yIChTdHJpbmcgcyA6IGl0KSB7CiAgICAgICAgICAgIGlmIChmaXJzdCkKICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGpvaW5lZCArPSBzZXA7CiAgICAgICAgICAgIGpvaW5lZCArPSBzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gam9pbmVkOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgSXRlcmFibGU8U3RyaW5nPiBzcGxpdChTdHJpbmcgcykgewogICAgICAgIExpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7CiAgICAgICAgU3RhY2s8U3RyaW5nPiBzdGFjayA9IG5ldyBTdGFjazxTdHJpbmc+KCk7CiAgICAgICAgUGF0dGVybiBwYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKCJbLFxcW1xcXV18Lis/Iik7CiAgICAgICAgTWF0Y2hlciBtYXRjaGVyID0gcGF0dGVybi5tYXRjaGVyKHMpOwoKICAgICAgICBzdGFjay5wdXNoKCIiKTsKICAgICAgICB3aGlsZSAobWF0Y2hlci5maW5kKCkpIHsKICAgICAgICAgICAgU3RyaW5nIHRva2VuID0gbWF0Y2hlci5ncm91cCgpOwogICAgICAgICAgICBpZiAodG9rZW4uZXF1YWxzKCJbIikpIHsKICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goIiIpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuLmVxdWFscygiXSIpKSB7CiAgICAgICAgICAgICAgICBpZiAoISBzdGFjay5wZWVrKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoam9pbigiLiIsIHN0YWNrKSk7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpOwogICAgICAgICAgICAgICAgc3RhY2sucHVzaCgiIik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4uZXF1YWxzKCIsIikpIHsKICAgICAgICAgICAgICAgIGlmICghIHN0YWNrLnBlZWsoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChqb2luKCIuIiwgc3RhY2spKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpOwogICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEgKHN0YWNrLmlzRW1wdHkoKSB8fCBzdGFjay5wZWVrKCkuaXNFbXB0eSgpKSkKICAgICAgICAgICAgcmVzdWx0LmFkZChqb2luKCIuIiwgc3RhY2spKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBTdHJpbmcgdGV4dCA9ICJhLGIsY1thLGIsY1thXV0sZCI7CiAgICAgICAgZm9yIChTdHJpbmcgcyA6IHNwbGl0KHRleHQpKQogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CiAgICB9Cn0=