function c = unique_stable(a)
[c, ~, ic] = unique(a);
ia = arrayfun(@(n) find(ic == n)(1), 1:numel(c));
c = a(sort(ia));
end
function c = unionize_if_intersect(c)
if numel(c) < 2, return, end
for ij = nchoosek(1:numel(c), 2)'
if ~isempty(intersect(c{ij(1)}, c{ij(2)}))
c{ij(1)} = union(c{ij(1)}, c{ij(2)});
c(ij(2)) = [];
c = unionize_if_intersect(c);
break
end
end
end
function c = f(a)
u = unique_stable(cell2mat(cellfun(@(s) {strsplit(s, "=")}, a)));
h = @(k) find(strcmp(u, k))(1);
c = cellfun(@(s) {arrayfun(@(s) h(s), strsplit(s, "="))}, a');
c = cellfun(@(iu) {u(iu)}, unionize_if_intersect(c));
end
a = {"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"};
disp(['[' strjoin(cellfun(@(s) {['["' strjoin(s, '", "') '"]']}, f(a)), ', ') ']'])
ZnVuY3Rpb24gYyA9IHVuaXF1ZV9zdGFibGUoYSkKCVtjLCB+LCBpY10gPSB1bmlxdWUoYSk7CglpYSA9IGFycmF5ZnVuKEAobikgZmluZChpYyA9PSBuKSgxKSwgMTpudW1lbChjKSk7CgljID0gYShzb3J0KGlhKSk7CmVuZApmdW5jdGlvbiBjID0gdW5pb25pemVfaWZfaW50ZXJzZWN0KGMpCglpZiBudW1lbChjKSA8IDIsIHJldHVybiwgZW5kCglmb3IgaWogPSBuY2hvb3NlaygxOm51bWVsKGMpLCAyKScKCQlpZiB+aXNlbXB0eShpbnRlcnNlY3QoY3tpaigxKX0sIGN7aWooMil9KSkKCQkJY3tpaigxKX0gPSB1bmlvbihje2lqKDEpfSwgY3tpaigyKX0pOwoJCQljKGlqKDIpKSA9IFtdOwoJCQljID0gdW5pb25pemVfaWZfaW50ZXJzZWN0KGMpOwoJCQlicmVhawoJCWVuZAoJZW5kCmVuZApmdW5jdGlvbiBjID0gZihhKQoJdSA9IHVuaXF1ZV9zdGFibGUoY2VsbDJtYXQoY2VsbGZ1bihAKHMpIHtzdHJzcGxpdChzLCAiPSIpfSwgYSkpKTsKCWggPSBAKGspIGZpbmQoc3RyY21wKHUsIGspKSgxKTsKCWMgPSBjZWxsZnVuKEAocykge2FycmF5ZnVuKEAocykgaChzKSwgc3Ryc3BsaXQocywgIj0iKSl9LCBhJyk7CgljID0gY2VsbGZ1bihAKGl1KSB7dShpdSl9LCB1bmlvbml6ZV9pZl9pbnRlcnNlY3QoYykpOwplbmQKYSA9IHsiYTE9YTIiLCAiYjE9YjIiLCAiYjM9YjIiLCAiYzE9YzIiLCAiZTE9ZTIiLCAuLi4KICAgICAiYTM9YTQiLCAiYzM9YzQiLCAiZTE9ZTMiLCAiYTI9YTQiLCAiYzM9YzEiLCAuLi4KICAgICAiYjM9YTQiLCAiYzI9ZDEiLCAiYTQ9YTUiLCAiZDI9YzEiLCAiYjQ9YjMiLCAiZDM9YzMifTsKZGlzcChbJ1snIHN0cmpvaW4oY2VsbGZ1bihAKHMpIHtbJ1siJyBzdHJqb2luKHMsICciLCAiJykgJyJdJ119LCBmKGEpKSwgJywgJykgJ10nXSk=
[["a1", "a2", "b1", "b2", "b3", "a3", "a4", "a5", "b4"], ["c1", "c2", "c3", "c4", "d1", "d2", "d3"], ["e1", "e2", "e3"]]