/* package whatever; // don't place package name! */
 
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	{
		String input 
= "Jim ate a [sandwich] with [pickles] and [dried [onions]] and ] [an[other] match]"; 		List<String> balanced = getBalancedSubstrings(input, '[', ']', true);
		System.
out.
println("Balanced ones: " + balanced
); 		List<String> rx_split = new ArrayList<String>();
		for (String item 
: balanced
) {    			rx_split.add("\\s*" + Pattern.quote(item) + "\\s*");
 		}
		System.
out.
println("In-betweens: " + Arrays.
toString(input.
split(rx
))); 	}
		List<String> subTreeList = new ArrayList<String>();
		int level = 0;
		int lastOpenBracket = -1;
		for (int i = 0; i < s.length(); i++) {
    		char c = s.charAt(i);
    		if (c == markStart) {
        		level++;
        		if (level == 1) {
            		lastOpenBracket = (includeMarkers ? i : i+1);
        		}
    		}
    		else if (c == markEnd) {
        		if (level == 1) {
            		subTreeList.add(s.substring(lastOpenBracket, (includeMarkers ? i+1 : i)));
        		}
        		if (level > 0) level--;
    		}
		}
		return subTreeList;
	}
}
				LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguKjsKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlTdHJpbmcgaW5wdXQgPSAiSmltIGF0ZSBhIFtzYW5kd2ljaF0gd2l0aCBbcGlja2xlc10gYW5kIFtkcmllZCBbb25pb25zXV0gYW5kIF0gW2FuW290aGVyXSBtYXRjaF0iOwoJCUxpc3Q8U3RyaW5nPiBiYWxhbmNlZCA9IGdldEJhbGFuY2VkU3Vic3RyaW5ncyhpbnB1dCwgJ1snLCAnXScsIHRydWUpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQmFsYW5jZWQgb25lczogIiArIGJhbGFuY2VkKTsKCQlMaXN0PFN0cmluZz4gcnhfc3BsaXQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKCQlmb3IgKFN0cmluZyBpdGVtIDogYmFsYW5jZWQpIHsKICAgCQkJcnhfc3BsaXQuYWRkKCJcXHMqIiArIFBhdHRlcm4ucXVvdGUoaXRlbSkgKyAiXFxzKiIpOwogCQl9CiAJCVN0cmluZyByeCA9IFN0cmluZy5qb2luKCJ8Iiwgcnhfc3BsaXQpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiSW4tYmV0d2VlbnM6ICIgKyBBcnJheXMudG9TdHJpbmcoaW5wdXQuc3BsaXQocngpKSk7Cgl9CglwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXRCYWxhbmNlZFN1YnN0cmluZ3MoU3RyaW5nIHMsIENoYXJhY3RlciBtYXJrU3RhcnQsIENoYXJhY3RlciBtYXJrRW5kLCBCb29sZWFuIGluY2x1ZGVNYXJrZXJzKSB7CgkJTGlzdDxTdHJpbmc+IHN1YlRyZWVMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CgkJaW50IGxldmVsID0gMDsKCQlpbnQgbGFzdE9wZW5CcmFja2V0ID0gLTE7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyBpKyspIHsKICAgIAkJY2hhciBjID0gcy5jaGFyQXQoaSk7CiAgICAJCWlmIChjID09IG1hcmtTdGFydCkgewogICAgICAgIAkJbGV2ZWwrKzsKICAgICAgICAJCWlmIChsZXZlbCA9PSAxKSB7CiAgICAgICAgICAgIAkJbGFzdE9wZW5CcmFja2V0ID0gKGluY2x1ZGVNYXJrZXJzID8gaSA6IGkrMSk7CiAgICAgICAgCQl9CiAgICAJCX0KICAgIAkJZWxzZSBpZiAoYyA9PSBtYXJrRW5kKSB7CiAgICAgICAgCQlpZiAobGV2ZWwgPT0gMSkgewogICAgICAgICAgICAJCXN1YlRyZWVMaXN0LmFkZChzLnN1YnN0cmluZyhsYXN0T3BlbkJyYWNrZXQsIChpbmNsdWRlTWFya2VycyA/IGkrMSA6IGkpKSk7CiAgICAgICAgCQl9CiAgICAgICAgCQlpZiAobGV2ZWwgPiAwKSBsZXZlbC0tOwogICAgCQl9CgkJfQoJCXJldHVybiBzdWJUcmVlTGlzdDsKCX0KfQ==