using System.Collections.Generic;
public static Dictionary<char, char> _openCloseSymbols = new Dictionary<char, char> ();
public static void Main()
_openCloseSymbols.Add('(', ')');
_openCloseSymbols.Add('[', ']');
Console.WriteLine(Validate("(())"));
Console.WriteLine(Validate("([])([()])"));
Console.WriteLine(Validate("()()([])()()()([])()()()"));
Console.WriteLine(Validate("()()([])()()()([])[]()()()"));
Console.WriteLine(Validate("([)]"));
Console.WriteLine(Validate("())"));
Console.WriteLine(Validate(")(("));
public static bool Validate(string input)
if (string.IsNullOrEmpty(input))
var arr = input.ToCharArray();
if (!_openCloseSymbols.ContainsKey(arr[0]))
var stck = new Stack<char>();
for (var i = 1; i < arr.Length; i++)
if (_openCloseSymbols.ContainsKey(curSym))
else if (!_openCloseSymbols.ContainsKey(curSym) && (stck.Count == 0 || _openCloseSymbols[stck.Pop()] != curSym))