#include <bits/stdc++.h>
using namespace std;

int isMatching(stack<char> &stk, char c){
    if(stk.empty()){
        return 0;
    }
    char topC = stk.top();
    if( (topC == '(' && c == ')') || (topC == '{' && c == '}') || (topC == '[' && c == ']') )
        return 1;
    return 0;
}

bool isValid(string s) {
    stack<char> stk;
    int len = s.length();
    for(int i = 0; i < len; i++){
        if(s[i] == '(' || s[i] == '{' || s[i] == '['){
                stk.push(s[i]);
                continue;
        } else if((s[i] == ')' || s[i] == '}' || s[i] == ']') && isMatching(stk, s[i])){
            stk.pop();
            continue;
        }
        return false;
    }
    if(!stk.empty())
        return false;
    return true;
}

int main() {
	cout << isValid("(){}[]") << endl;
	cout << isValid("(){(}[]") << endl;
	return 0;
}