Prepare some dummy data to investigate: alist = RandomSample[Table[ToExpression["a" <> ToString[i]], {i, 1, 10000}]]; range = Range[10000]; Do[ len = RandomInteger[{3000, 10000}]; select = Sort[RandomSample[range, len]]; sublists[j] = alist[[select]]; , {j, 1, 5000}] we have 5000 `sublists` of length between `3000` and `10000` elements `"ai"` in a particular order. I would like to have a function that merges all 5000 `sublists` such that all duplicates are discarded and any `"ai"` appear to the left of `"aj"` if they do so in `alist`. For the purpose of an actual real world problem one should assume that `alist` is not known explicitly, but `sublists[j]` are known. How can one do this in Mathematica most efficiently? A tiny example of the above would be: alist = {a1,a3,a2,a5,a4}; sublists[1] = {a1,a5}; sublists[2] = {a3,a2,a5}; sublists[3] = {a1,a2}; so that the function `merge` returns: merge[Table[sublists[i],{i,1,3}]] > {a1,a3,a2,a5} Note that `merge` was not given the actual `alist` to compare to, but by the order of the `a` elements in the `sublists` it assables the merged list in correct order.