process.stdin .resume ( ) ;
process.stdin .setEncoding ( 'utf8' ) ;
function checkMatchedBrackets( testString, brackets = [
'()' ,
'[]' ,
'{}'
] ) {
const escapedBrackets = brackets.map ( ( bracketSet) => bracketSet.replace ( /(.)/g , '\\ $1' ) ) ;
const stripRegexp = new RegExp( '[^' + escapedBrackets.join ( '' ) + ']' , 'g' ) ;
const iterativeRegexp = new RegExp( '(' + escapedBrackets.join ( '|' ) + ')' , 'g' ) ;
let iterativeString = testString.replace ( stripRegexp, '' ) ;
let previousLength = 0 ;
while ( iterativeString.length != previousLength) {
previousLength = iterativeString.length ;
iterativeString = iterativeString.replace ( iterativeRegexp, '' ) ;
}
return iterativeString.length === 0 ;
}
[
'should pass - abc' , // No brackets, always passes
'should pass - a[b]c' , // Matches brackets
'should pass - a(b)c[d]e' , // Pair of matched brackets
'should pass - a(b[c{d(e)f}g]h)i' , // Nested correctly
'should fail - a)b(c' , // brackets in the wrong order
'should fail - a[b(c]d)e' , // Bad nesting
'should fail - a[c' // Unbalanced
] .forEach ( ( testString) => console.log ( testString + ' ' + ( checkMatchedBrackets( testString) ? 'passed' : 'failed' ) ) ) ;
cHJvY2Vzcy5zdGRpbi5yZXN1bWUoKTsKcHJvY2Vzcy5zdGRpbi5zZXRFbmNvZGluZygndXRmOCcpOwoKCmZ1bmN0aW9uIGNoZWNrTWF0Y2hlZEJyYWNrZXRzKHRlc3RTdHJpbmcsIGJyYWNrZXRzID0gWwoJJygpJywKCSdbXScsCgkne30nCl0pIHsKCWNvbnN0IGVzY2FwZWRCcmFja2V0cyA9IGJyYWNrZXRzLm1hcCgoYnJhY2tldFNldCkgPT4gYnJhY2tldFNldC5yZXBsYWNlKC8oLikvZywgJ1xcJDEnKSk7CgkKCWNvbnN0IHN0cmlwUmVnZXhwID0gbmV3IFJlZ0V4cCgnW14nICsgZXNjYXBlZEJyYWNrZXRzLmpvaW4oJycpICsgJ10nLCAnZycpOwoJY29uc3QgaXRlcmF0aXZlUmVnZXhwID0gbmV3IFJlZ0V4cCgnKCcgKyBlc2NhcGVkQnJhY2tldHMuam9pbignfCcpICsgJyknLCAnZycpOwoKCWxldCBpdGVyYXRpdmVTdHJpbmcgPSB0ZXN0U3RyaW5nLnJlcGxhY2Uoc3RyaXBSZWdleHAsICcnKTsKCglsZXQgcHJldmlvdXNMZW5ndGggPSAwOwoJd2hpbGUgKGl0ZXJhdGl2ZVN0cmluZy5sZW5ndGggIT0gcHJldmlvdXNMZW5ndGgpIHsKCQlwcmV2aW91c0xlbmd0aCA9IGl0ZXJhdGl2ZVN0cmluZy5sZW5ndGg7CgkJaXRlcmF0aXZlU3RyaW5nID0gaXRlcmF0aXZlU3RyaW5nLnJlcGxhY2UoaXRlcmF0aXZlUmVnZXhwLCAnJyk7Cgl9CgoJcmV0dXJuIGl0ZXJhdGl2ZVN0cmluZy5sZW5ndGggPT09IDA7Cn0KClsKCSdzaG91bGQgcGFzcyAtIGFiYycsIC8vIE5vIGJyYWNrZXRzLCBhbHdheXMgcGFzc2VzCgknc2hvdWxkIHBhc3MgLSBhW2JdYycsIC8vIE1hdGNoZXMgYnJhY2tldHMKCSdzaG91bGQgcGFzcyAtIGEoYiljW2RdZScsIC8vIFBhaXIgb2YgbWF0Y2hlZCBicmFja2V0cwoJJ3Nob3VsZCBwYXNzIC0gYShiW2N7ZChlKWZ9Z11oKWknLCAvLyBOZXN0ZWQgY29ycmVjdGx5Cgknc2hvdWxkIGZhaWwgLSBhKWIoYycsIC8vIGJyYWNrZXRzIGluIHRoZSB3cm9uZyBvcmRlcgoJJ3Nob3VsZCBmYWlsIC0gYVtiKGNdZCllJywgLy8gQmFkIG5lc3RpbmcKCSdzaG91bGQgZmFpbCAtIGFbYycgLy8gVW5iYWxhbmNlZApdLmZvckVhY2goKHRlc3RTdHJpbmcpID0+IGNvbnNvbGUubG9nKHRlc3RTdHJpbmcgKyAnICcgKyAoY2hlY2tNYXRjaGVkQnJhY2tldHModGVzdFN0cmluZykgPyAncGFzc2VkJzonZmFpbGVkJykpKTsK