#include <stack>
char ascii_tab[128];
class Solution
{
public:
	bool isValid(string s)
	{
		if (s.size() == 0)
			return true;
		std::stack<char> st;
		ascii_tab['('] = 11;
		ascii_tab['{'] = 12;
		ascii_tab['['] = 13;
		ascii_tab[')'] = 21;
		ascii_tab['}'] = 22;
		ascii_tab[']'] = 23;
		for (auto c : s)
		{
			char n = ascii_tab[c];
			if (n < 20)
				st.push(n);
			else
			{
				if (st.empty())
					return false;
				if (n != st.top() + 10)
					return false;
				st.pop();
			}
		}
		if (st.empty())
			return true;
		return false;
	}
};