anchor.diff:  	 [7,2,3,1,6,5,4],
   	 [7,2,3,1,5,4,6],
   	 [7,2,3,1,4,6,5]],
  -	swap([1,2,3,4,5,6,7]))}.
  +	swap2([1,2,3,4,5,6,7])))}.
   
  -swap_8_elem_list_test_() ->
  +swap_tail2_7_elem_list_test_() ->
  +    {"swap [1,2,3,4,5,6,7] must halt and equal expected",
  +     ?_assertEqual(
  +	[[1,3,2,5,4,6,7],
  +	 [1,3,2,5,4,7,6],
  +	 [2,1,3,5,4,6,7],
  +	 [2,1,3,5,4,7,6],
  +	 [3,2,1,5,4,7,6],
  +	 [3,2,1,5,4,6,7],
  +	 [3,2,1,4,5,6,7],
  +	 [3,2,1,4,5,7,6],
  +	 [2,1,3,4,5,7,6],
  +	 [2,1,3,4,5,6,7],
  +	 [1,3,2,4,5,7,6],
  +	 [1,3,2,4,5,6,7]],
  +	swap_tail2([1,2,3,4,5,6,7]))}.
  +
  +swap2_8_elem_list_test_() ->
       {"swap [1,2,3,4,5,6,7,8] must halt and match certain expectation",
  -     ?_assertMatch([H|_] when H == [4,5,6,2,1,3,8,7], swap([1,2,3,4,5,6,7,8]))}.
  +     ?_assertMatch([H|_] when H == [5,6,4,2,1,3,8,7], swap2([1,2,3,4,5,6,7,8]))}.
  +
  +swap_tail2_8_elem_list_test_() ->
  +    {"swap [1,2,3,4,5,6,7,8] must halt and match certain expectation",
  +     ?_assertMatch([H|_] when H == [7,8,5,6,3,4,2,1], swap_tail2([1,2,3,4,5,6,7,8]))}.
  +
   
   %swap_2500_test_() ->
   %    {"Swap '[1..2500]' must halt", 
  -%     ?_assertMatch([[L|_]|_] when length(L) == 2500, swap(lists:seq(1, 2500)))}.
  +%    ?_assertMatch([[L|_]|_] when length(L) == 2500, swap_tail2(lists:seq(1, 2500)))}.
   
   
   %% swap([]) ->
  
positive.code: -module(swap).
  -export([swap/1, swap_2500_profile/0]).
  -include_lib("eunit/include/eunit.hrl").
  -import(dist, [dist/2]).
  -import(umerge, [umerge/2]).
  
  swap(L) ->
      swap(L, []).
  
  swap([], P) ->
  
negative.code: swap([X,Y,Z|T], []) ->
      swap(T, [[Y, X, Z], [Z, Y, X], [X, Z, Y]]);
  swap([X,Y,Z|T], P) ->
      swap(T, dist:dist(P, [[Y,X,Z],[Z,Y,X],[X,Z,Y]]));
  swap([A], P) ->
      dist([A], P).
  
  split([]) ->
      [];
  split([_]) ->
      [];
  split([H|T]) -> 
      split(T, [H]).
  
  split(L, R) when length(L) =:= length(R);
  		 length(L) =:= length(R) + 1 ->
      {R, L};
  split([H|T], R) ->
      split(T, [H|R]).
  
  swap_2500_profile() ->
       {X, _O} = timer:tc(?MODULE, swap_tail2, [lists:seq(1, 2500)]), 
       io:fwrite("Profile: ~p microsends~n", [X]).
  
  swap_test_one_test_() ->
      {"Swap [a] must yeild in [a]", ?_assertEqual([a], swap([a]))}.
  
  swap_tail2_test_() ->
      {"swapping '[1,2,3]' must result in '[2,1,3], [3,2,1], [1,3,2]'", 
       ?_assertEqual([[2,1,3], [3,2,1], [1,3,2]], swap_tail2([1,2,3]))}.
  
  swap2_test_() ->
      {"swapping '[1,2,3]' must result in '[2,1,3], [3,2,1], [1,3,2]'", 
       ?_assertEqual([[2,1,3], [3,2,1], [1,3,2]], swap2([1,2,3]))}.
  
  
  swap_empty_test_() ->
      {"swapping '[]' must result in '[]'", 
  