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 b = unionize_if_intersect(b)
if size(b, 1) < 2, return, end
for i = 1:size(b, 2)
k = find(b(:, i));
if 1 < numel(k)
b(k(1), :) = any(b(k, :));
b(k(2:end), :) = [];
end
end
end
function c = f(a)
u = unique_stable(cell2mat(cellfun(@(s) {strsplit(s, "=")}, a)));
s2b
= @
(s
) any
(cell2mat
(cellfun
(@
(k
) {strcmp(u
, k
)}, strsplit
(s
, "=")'))); b = unionize_if_intersect(cell2mat(cellfun(@(s) {s2b(s)}, a')));
c = arrayfun(@(r) {u(b(r, :))}, 1:size(b, 1)');
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+LCBpY10gPSB1bmlxdWUoYSk7CglpYSA9IGFycmF5ZnVuKEAobikgZmluZChpYyA9PSBuKSgxKSwgMTpudW1lbChjKSk7CgljID0gYShzb3J0KGlhKSk7CmVuZApmdW5jdGlvbiBiID0gdW5pb25pemVfaWZfaW50ZXJzZWN0KGIpCglpZiBzaXplKGIsIDEpIDwgMiwgcmV0dXJuLCBlbmQKCWZvciBpID0gMTpzaXplKGIsIDIpCgkJayA9IGZpbmQoYig6LCBpKSk7CgkJaWYgMSA8IG51bWVsKGspCgkJCWIoaygxKSwgOikgPSBhbnkoYihrLCA6KSk7CgkJCWIoaygyOmVuZCksIDopID0gW107CgkJZW5kCgllbmQKZW5kCmZ1bmN0aW9uIGMgPSBmKGEpCgl1ID0gdW5pcXVlX3N0YWJsZShjZWxsMm1hdChjZWxsZnVuKEAocykge3N0cnNwbGl0KHMsICI9Iil9LCBhKSkpOwoJczJiID0gQChzKSBhbnkoY2VsbDJtYXQoY2VsbGZ1bihAKGspIHtzdHJjbXAodSwgayl9LCBzdHJzcGxpdChzLCAiPSIpJykpKTsKCWIgPSB1bmlvbml6ZV9pZl9pbnRlcnNlY3QoY2VsbDJtYXQoY2VsbGZ1bihAKHMpIHtzMmIocyl9LCBhJykpKTsKCWMgPSBhcnJheWZ1bihAKHIpIHt1KGIociwgOikpfSwgMTpzaXplKGIsIDEpJyk7CmVuZAphID0geyJhMT1hMiIsICJiMT1iMiIsICJiMz1iMiIsICJjMT1jMiIsICJlMT1lMiIsIC4uLgogICAgICJhMz1hNCIsICJjMz1jNCIsICJlMT1lMyIsICJhMj1hNCIsICJjMz1jMSIsIC4uLgogICAgICJiMz1hNCIsICJjMj1kMSIsICJhND1hNSIsICJkMj1jMSIsICJiND1iMyIsICJkMz1jMyJ9OwpkaXNwKFsnWycgc3Ryam9pbihjZWxsZnVuKEAocykge1snWyInIHN0cmpvaW4ocywgJyIsICInKSAnIl0nXX0sIGYoYSkpLCAnLCAnKSAnXSddKQ==
[["a1", "a2", "b1", "b2", "b3", "a3", "a4", "a5", "b4"], ["c1", "c2", "c3", "c4", "d1", "d2", "d3"], ["e1", "e2", "e3"]]