using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var s = "AABCBACBCCAACCB AABCBACBCCAACCB AABBBAABCCAACCB";
var rx = new Regex("(?=(?<value>(?:(?<A>A)|(?<B>B)|(?<C>C)){3}(?<-A>)(?<-B>)(?<-C>)))");
var m = rx.Match(s);
while (m.Success)
{
var list = new List<string>();
list.Add(m.Groups["value"].Value);
s = s.Substring(m.Groups["value"].Index+m.Groups["value"].Length-1);
m = rx.Match(s);
if (m.Success && m.Groups["value"].Index == 0)
{
list.Add(m.Groups["value"].Value);
s = s.Substring(m.Groups["value"].Index+m.Groups["value"].Length-1);
m = rx.Match(s);
if (m.Success && m.Groups["value"].Index == 0)
{
list.Add(m.Groups["value"].Value);
Console.WriteLine(string.Join(", ", list));
s = s.Substring(m.Groups["value"].Index+m.Groups["value"].Length-1);
m = rx.Match(s);
}
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJdmFyIHMgPSAiQUFCQ0JBQ0JDQ0FBQ0NCIEFBQkNCQUNCQ0NBQUNDQiBBQUJCQkFBQkNDQUFDQ0IiOwoJCXZhciByeCA9IG5ldyBSZWdleCgiKD89KD88dmFsdWU+KD86KD88QT5BKXwoPzxCPkIpfCg/PEM+QykpezN9KD88LUE+KSg/PC1CPikoPzwtQz4pKSkiKTsKCQl2YXIgbSA9IHJ4Lk1hdGNoKHMpOwoJCXdoaWxlIChtLlN1Y2Nlc3MpCgkJewoJCQl2YXIgbGlzdCA9IG5ldyBMaXN0PHN0cmluZz4oKTsKCQkJbGlzdC5BZGQobS5Hcm91cHNbInZhbHVlIl0uVmFsdWUpOwoJCQlzID0gcy5TdWJzdHJpbmcobS5Hcm91cHNbInZhbHVlIl0uSW5kZXgrbS5Hcm91cHNbInZhbHVlIl0uTGVuZ3RoLTEpOwoJCQltID0gcnguTWF0Y2gocyk7CgkJCWlmIChtLlN1Y2Nlc3MgJiYgbS5Hcm91cHNbInZhbHVlIl0uSW5kZXggPT0gMCkKCQkJewoJCQkJbGlzdC5BZGQobS5Hcm91cHNbInZhbHVlIl0uVmFsdWUpOwoJCQkJcyA9IHMuU3Vic3RyaW5nKG0uR3JvdXBzWyJ2YWx1ZSJdLkluZGV4K20uR3JvdXBzWyJ2YWx1ZSJdLkxlbmd0aC0xKTsKCQkJCW0gPSByeC5NYXRjaChzKTsKCQkJCWlmIChtLlN1Y2Nlc3MgJiYgbS5Hcm91cHNbInZhbHVlIl0uSW5kZXggPT0gMCkKCQkJCXsKCQkJCQlsaXN0LkFkZChtLkdyb3Vwc1sidmFsdWUiXS5WYWx1ZSk7CgkJCQkJQ29uc29sZS5Xcml0ZUxpbmUoc3RyaW5nLkpvaW4oIiwgIiwgbGlzdCkpOwoJCQkJCXMgPSBzLlN1YnN0cmluZyhtLkdyb3Vwc1sidmFsdWUiXS5JbmRleCttLkdyb3Vwc1sidmFsdWUiXS5MZW5ndGgtMSk7CgkJCQkgICAgbSA9IHJ4Lk1hdGNoKHMpOwoJCQkJfQoJCQl9CgkJfQoJfQp9