using System.Collections.Generic;
using System.Text.RegularExpressions;
public static bool GetNextState(bool[] states)
for (var i = 0; i < states.Length; i++)
if ((states[i] = !states[i]) == true)
public static string Join(string[] split, string[] matches, bool[] states)
var sb = new StringBuilder();
for (var i = 0; i < states.Length; i++)
sb.Append(split[i] + (states[i]? matches[i]:""));
public static IEnumerable<string> Results(string input)
var matches = Regex.Matches(input, @"\(.+?\)").Select(x => x.Value.Trim('(', ')')).ToArray();
var split = Regex.Split(input, @"\(.+?\)");
var states = new bool[matches.Length];
yield return Join(split, matches, states);
} while (!GetNextState(states));
public static void Main(string[] args)
foreach (var result in Results(s))
Console.WriteLine(result);