The C3 linearization algorithm for method resolution in multiple inheritance OO languages: Looking for a justification for some implementation detail
Without the last list:

merge(&lt;B,D,O&gt;, &lt;C,F,O&gt;, &lt;D,O&gt;) =
  &lt;B,D,C,F,O&gt; 


With the last list:

merge(&lt;B,D,O&gt;, &lt;C,F,O&gt;, &lt;D,O&gt;, &lt;B,C,D&gt;) =
  &lt;B&gt; + merge(&lt;D,O&gt;, &lt;C,F,O&gt;, &lt;D,O&gt;, &lt;C,D&gt;) =
  &lt;B,C&gt; + merge(&lt;D,O&gt;, &lt;F,O&gt;, &lt;D,O&gt;, &lt;D&gt;) =
  &lt;B,C,D,F,O&gt;




Without the last list:

merge(&lt;B,D,C,O&gt;, &lt;C,F,O&gt;, &lt;D,O&gt;) =
  &lt;B,D,C,F,O&gt; 


With the last list:

merge(&lt;B,D,C,O&gt;, &lt;C,F,O&gt;, &lt;D,O&gt;, &lt;B,C,D&gt;) =
  &lt;B&gt; + merge(&lt;D,C,O&gt;, &lt;C,F,O&gt;, &lt;D,O&gt;, &lt;C,D&gt;) =
  no-merge




Intuitively, the last list forces the final result to be compatible with the ordering &lt;B1,...,Bn&gt;. That might change the order, or make the merge fail.