using static System.Console;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
string[] input = {
"a1=a2", "b1=b2", "b3=b2", "c1=c2", "e1=e2", "a3=a4", "c3=c4", "e1=e3",
"a2=a4", "c3=c1", "b3=a4", "c2=d1", "a4=a5", "d2=c1", "b4=b3", "d3=c3"
};
var h = new Dictionary<string, int>();
foreach (var e in input.Select(s => s.Split('='))) {
var (l, r) = (e[0], e[1]);
switch (h.ContainsKey(l), h.ContainsKey(r)) {
case (false, false):
h[r] = h[l] = h.Count;
break;
case (true, false):
h[r] = h[l];
break;
case (false, true):
h[l] = h[r];
break;
case (true, true):
h.Where(x => x.Value == h[r]).ToList().ForEach(x => h[x.Key] = h[l]);
break;
}
}
foreach (var g in h.GroupBy(x => x.Value, x => x.Key)) WriteLine($"[{string.Join(", ", g)}]");
}
}
dXNpbmcgc3RhdGljIFN5c3RlbS5Db25zb2xlOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpjbGFzcyBQcm9ncmFtCnsKICAgIHN0YXRpYyB2b2lkIE1haW4oKQogICAgewogICAgICAgIHN0cmluZ1tdIGlucHV0ID0gewogICAgICAgICAgICAiYTE9YTIiLCAiYjE9YjIiLCAiYjM9YjIiLCAiYzE9YzIiLCAiZTE9ZTIiLCAiYTM9YTQiLCAiYzM9YzQiLCAiZTE9ZTMiLAogICAgICAgICAgICAiYTI9YTQiLCAiYzM9YzEiLCAiYjM9YTQiLCAiYzI9ZDEiLCAiYTQ9YTUiLCAiZDI9YzEiLCAiYjQ9YjMiLCAiZDM9YzMiCiAgICAgICAgfTsKCiAgICAgICAgdmFyIGggPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIGludD4oKTsKCiAgICAgICAgZm9yZWFjaCAodmFyIGUgaW4gaW5wdXQuU2VsZWN0KHMgPT4gcy5TcGxpdCgnPScpKSkgewogICAgICAgICAgICB2YXIgKGwsIHIpID0gKGVbMF0sIGVbMV0pOwogICAgICAgICAgICBzd2l0Y2ggKGguQ29udGFpbnNLZXkobCksIGguQ29udGFpbnNLZXkocikpIHsKICAgICAgICAgICAgICAgIGNhc2UgKGZhbHNlLCBmYWxzZSk6CiAgICAgICAgICAgICAgICAgICAgaFtyXSA9IGhbbF0gPSBoLkNvdW50OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAodHJ1ZSwgZmFsc2UpOgogICAgICAgICAgICAgICAgICAgIGhbcl0gPSBoW2xdOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAoZmFsc2UsIHRydWUpOgogICAgICAgICAgICAgICAgICAgIGhbbF0gPSBoW3JdOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAodHJ1ZSwgdHJ1ZSk6CiAgICAgICAgICAgICAgICAgICAgaC5XaGVyZSh4ID0+IHguVmFsdWUgPT0gaFtyXSkuVG9MaXN0KCkuRm9yRWFjaCh4ID0+IGhbeC5LZXldID0gaFtsXSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKHZhciBnIGluIGguR3JvdXBCeSh4ID0+IHguVmFsdWUsIHggPT4geC5LZXkpKSBXcml0ZUxpbmUoJCJbe3N0cmluZy5Kb2luKCIsICIsIGcpfV0iKTsKICAgIH0KfQ==
[a1, a2, b1, b2, b3, a3, a4, a5, b4]
[c1, c2, c3, c4, d1, d2, d3]
[e1, e2, e3]