import java.util.regex.Matcher ;
import java.util.regex.Pattern ;
public class Main
{
public static void main
( String [ ] args
) {
String mainstr
= "[[data link control], [communication, []], [computer, [applications of computer, number of computer]], [world wide web], [lesson, [covered in lesson]], [access to remote], [marketing and sale], [electronic fund transfer], [network, [network of network, wide area network, communication network, computer network, [area network, [local area network, metropolitan area network]]]]]" ; String search
= "area network" ; Pattern p = Pattern.compile ( "(?:^|, |\\ [)(" + search + ")(?:]|, |$)" ) ;
Matcher m = p.matcher ( mainstr) ;
if ( m.find ( ) )
{
int start = m.start ( 1 ) ;
int end = start + search.length ( ) ;
int count = 0 ;
int pos = end;
if ( mainstr.charAt ( end+ 2 ) == '[' )
{
while ( count != - 1 )
if ( mainstr.charAt ( ++ pos) == ']' )
count--;
else if ( mainstr.charAt ( ++ pos) == '[' )
count++;
System .
out .
println ( "Ancestors = " + mainstr.
substring ( end
+ 2 , pos
- 1 ) ) ; }
count = 0 ;
pos = start;
int lastComma = - 1 ;
while ( count != 2 )
switch ( mainstr.charAt ( -- pos) )
{
case ']' : count--; break ;
case '[' : count++; break ;
case ',' : lastComma = pos;
}
System .
out .
println ( "Parent = " + mainstr.
substring ( pos
+ 1 , lastComma
) ) ; }
}
}
aW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwppbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CgpwdWJsaWMgY2xhc3MgTWFpbgp7CiAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgIHsKICAgICAgU3RyaW5nIG1haW5zdHIgPSAiW1tkYXRhIGxpbmsgY29udHJvbF0sIFtjb21tdW5pY2F0aW9uLCBbXV0sIFtjb21wdXRlciwgW2FwcGxpY2F0aW9ucyAgICAgb2YgY29tcHV0ZXIsIG51bWJlciBvZiBjb21wdXRlcl1dLCBbd29ybGQgd2lkZSB3ZWJdLCBbbGVzc29uLCBbY292ZXJlZCBpbiBsZXNzb25dXSwgW2FjY2VzcyB0byByZW1vdGVdLCBbbWFya2V0aW5nIGFuZCBzYWxlXSwgW2VsZWN0cm9uaWMgZnVuZCB0cmFuc2Zlcl0sIFtuZXR3b3JrLCBbbmV0d29yayBvZiBuZXR3b3JrLCB3aWRlIGFyZWEgbmV0d29yaywgY29tbXVuaWNhdGlvbiBuZXR3b3JrLCBjb21wdXRlciBuZXR3b3JrLCBbYXJlYSBuZXR3b3JrLCBbbG9jYWwgYXJlYSBuZXR3b3JrLCBtZXRyb3BvbGl0YW4gYXJlYSBuZXR3b3JrXV1dXV0iOwogICAgICBTdHJpbmcgc2VhcmNoID0gImFyZWEgbmV0d29yayI7CiAgICAgIFBhdHRlcm4gcCA9IFBhdHRlcm4uY29tcGlsZSgiKD86XnwsIHxcXFspKCIgKyBzZWFyY2ggKyAiKSg/Ol18LCB8JCkiKTsKICAgICAgTWF0Y2hlciBtID0gcC5tYXRjaGVyKG1haW5zdHIpOwogICAgICBpZiAobS5maW5kKCkpCiAgICAgIHsKICAgICAgICAgaW50IHN0YXJ0ID0gbS5zdGFydCgxKTsKICAgICAgICAgaW50IGVuZCA9IHN0YXJ0ICsgc2VhcmNoLmxlbmd0aCgpOwogICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICBpbnQgcG9zID0gZW5kOwogICAgICAgICBpZiAobWFpbnN0ci5jaGFyQXQoZW5kKzIpID09ICdbJykKICAgICAgICAgewogICAgICAgICAgICB3aGlsZSAoY291bnQgIT0gLTEpCiAgICAgICAgICAgICAgIGlmIChtYWluc3RyLmNoYXJBdCgrK3BvcykgPT0gJ10nKQogICAgICAgICAgICAgICAgICBjb3VudC0tOwogICAgICAgICAgICAgICBlbHNlIGlmIChtYWluc3RyLmNoYXJBdCgrK3BvcykgPT0gJ1snKQogICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFuY2VzdG9ycyA9ICIgKyBtYWluc3RyLnN1YnN0cmluZyhlbmQrMiwgcG9zLTEpKTsKICAgICAgICAgfQogICAgICAgICBjb3VudCA9IDA7CiAgICAgICAgIHBvcyA9IHN0YXJ0OwogICAgICAgICBpbnQgbGFzdENvbW1hID0gLTE7CiAgICAgICAgIHdoaWxlIChjb3VudCAhPSAyKQogICAgICAgICAgICBzd2l0Y2ggKG1haW5zdHIuY2hhckF0KC0tcG9zKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlICddJzogY291bnQtLTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgJ1snOiBjb3VudCsrOyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSAnLCc6IGxhc3RDb21tYSA9IHBvczsKICAgICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBhcmVudCA9ICIgKyBtYWluc3RyLnN1YnN0cmluZyhwb3MrMSwgbGFzdENvbW1hKSk7CiAgICAgIH0KICAgfQp9Cg==