import std.stdio;
import std.array;
import std.algorithm;
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"
];
void main()
{
ulong[string] g;
string[] id;
foreach (ref s; input) {
auto h = s.split('=').map!(t => t in g ? g[t] : (id ~= t) ? g[t] = g.length : 0);
ulong i = h.minElement;
ulong j = h.maxElement;
foreach (ref x; g) if (x == j) x = i;
}
foreach (i; g.values.sort.uniq) writeln(id.filter!(x => g[x] == i));
}
aW1wb3J0IHN0ZC5zdGRpbzsKaW1wb3J0IHN0ZC5hcnJheTsKaW1wb3J0IHN0ZC5hbGdvcml0aG07CgpzdHJpbmdbXSBpbnB1dCA9IFsKICAgICJhMT1hMiIsICJiMT1iMiIsICJiMz1iMiIsICJjMT1jMiIsICJlMT1lMiIsICJhMz1hNCIsICJjMz1jNCIsICJlMT1lMyIsCiAgICAiYTI9YTQiLCAiYzM9YzEiLCAiYjM9YTQiLCAiYzI9ZDEiLCAiYTQ9YTUiLCAiZDI9YzEiLCAiYjQ9YjMiLCAiZDM9YzMiCl07Cgp2b2lkIG1haW4oKQp7CiAgICB1bG9uZ1tzdHJpbmddIGc7CiAgICBzdHJpbmdbXSBpZDsKCiAgICBmb3JlYWNoIChyZWYgczsgaW5wdXQpIHsKICAgICAgICBhdXRvIGggPSBzLnNwbGl0KCc9JykubWFwISh0ID0+IHQgaW4gZyA/IGdbdF0gOiAoaWQgfj0gdCkgPyBnW3RdID0gZy5sZW5ndGggOiAwKTsKCiAgICAgICAgdWxvbmcgaSA9IGgubWluRWxlbWVudDsKICAgICAgICB1bG9uZyBqID0gaC5tYXhFbGVtZW50OwogICAgICAgIGZvcmVhY2ggKHJlZiB4OyBnKSBpZiAoeCA9PSBqKSB4ID0gaTsKICAgIH0KCiAgICBmb3JlYWNoIChpOyBnLnZhbHVlcy5zb3J0LnVuaXEpIHdyaXRlbG4oaWQuZmlsdGVyISh4ID0+IGdbeF0gPT0gaSkpOwp9
["a1", "a2", "b1", "b2", "b3", "a3", "a4", "a5", "b4"]
["c1", "c2", "c3", "c4", "d1", "d2", "d3"]
["e1", "e2", "e3"]