using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
string msg= "{1,{Cat,{Blue,1}},2,{Dog,5}}";
msg = msg.Substring(1, msg.Length - 2);
string[] charSetOccurences = Regex.Split(msg, @",(?=[^{}]*(?:(?:(?'O'{)[^{}]*)+(?:(?'-O'})[^{}]*?)+)*(?(O)(?!))$)");
foreach (string s in charSetOccurences)
{
Console.WriteLine(s);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnM7CiAKcHVibGljIGNsYXNzIFRlc3QKewogICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQogICAgeyAgIAogICAgICAgIHN0cmluZyBtc2c9ICJ7MSx7Q2F0LHtCbHVlLDF9fSwyLHtEb2csNX19IjsKICAgICAgICBtc2cgPSBtc2cuU3Vic3RyaW5nKDEsIG1zZy5MZW5ndGggLSAyKTsKICAgICAgICBzdHJpbmdbXSBjaGFyU2V0T2NjdXJlbmNlcyA9IFJlZ2V4LlNwbGl0KG1zZywgQCIsKD89W157fV0qKD86KD86KD8nTyd7KVtee31dKikrKD86KD8nLU8nfSlbXnt9XSo/KSspKig/KE8pKD8hKSkkKSIpOwogICAgICAgIGZvcmVhY2ggKHN0cmluZyBzIGluIGNoYXJTZXRPY2N1cmVuY2VzKQogICAgICAgIHsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUocyk7CiAgICAgICAgfQogICAgfQp9