using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
string hieroglyphics = @"^(?=^[^()]*(?>[^()]+|\((?<DEPTH>)|\)(?<-DEPTH>))*(?(DEPTH)(?!))[^()]*$)[(]*[0-9a-zA-Z]+[)]*(\s+(&&|\|\|)\s+[(]*[0-9a-zA-Z]+[)]*)*$";
var tests = new List<string>
{
// Working
"(1 && 2)",
"((1 && 2) && (3 || 4))",
// Not working
"1 && 2",
"(1 && 2) && (3 || 4)",
"Stack && Overflow"
};
foreach (var test in tests)
Console.WriteLine(test + ": " + Regex.IsMatch(test, hieroglyphics));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewogICAgCQlzdHJpbmcgaGllcm9nbHlwaGljcyA9IEAiXig/PV5bXigpXSooPz5bXigpXSt8XCgoPzxERVBUSD4pfFwpKD88LURFUFRIPikpKig/KERFUFRIKSg/ISkpW14oKV0qJClbKF0qWzAtOWEtekEtWl0rWyldKihccysoJiZ8XHxcfClccytbKF0qWzAtOWEtekEtWl0rWyldKikqJCI7CgoJCQoJCXZhciB0ZXN0cyA9IG5ldyBMaXN0PHN0cmluZz4KCQl7CgkJCS8vIFdvcmtpbmcKCQkJCSIoMSAmJiAyKSIsCgkJCQkiKCgxICYmIDIpICYmICgzIHx8IDQpKSIsCgkJCgkJCS8vIE5vdCB3b3JraW5nCgkJCSIxICYmIDIiLAoJCQkiKDEgJiYgMikgJiYgKDMgfHwgNCkiLAoJCQkiU3RhY2sgJiYgT3ZlcmZsb3ciCgkJfTsKCQkKCQkJZm9yZWFjaCAodmFyIHRlc3QgaW4gdGVzdHMpCgkJCUNvbnNvbGUuV3JpdGVMaW5lKHRlc3QgKyAiOiAiICsgUmVnZXguSXNNYXRjaCh0ZXN0LCBoaWVyb2dseXBoaWNzKSk7Cgl9Cn0=