3 Adjusted for arbitrarily specified order edited May 3 at 2:00 Bob Hanlon 65.7k33 gold badges3737 silver badges101101 bronze badges expr = a b c h;  You need to inactivate Times to keep the factors from automatically being put in canonical order. expr2 = Inactive[Times] @@ Flatten[Reverse /@ Partition[List @@ expr, 2]]  expr == (expr2 // Activate) (* True *)  EDIT: For an arbitrarily specified order expr2 = Inactive[Times] @@ (List @@ expr)[[{2, 1, 4, 3}]]  For the example given in your comment, expr3 = a*b*c*h + d*f*g*h; expr4 = Inactive[Times] @@ (List @@ #)[[{2, 1, 4, 3}]] & /@ expr3  expr = a b c h;  You need to inactivate Times to keep the factors from automatically being put in canonical order. expr2 = Inactive[Times] @@ Flatten[Reverse /@ Partition[List @@ expr, 2]]  expr == (expr2 // Activate) (* True *)  EDIT: For an arbitrarily specified order expr2 = Inactive[Times] @@ (List @@ expr)[[{2, 1, 4, 3}]]  expr = a b c h;  You need to inactivate Times to keep the factors from automatically being put in canonical order. expr2 = Inactive[Times] @@ Flatten[Reverse /@ Partition[List @@ expr, 2]]  expr == (expr2 // Activate) (* True *)  EDIT: For an arbitrarily specified order expr2 = Inactive[Times] @@ (List @@ expr)[[{2, 1, 4, 3}]]  For the example given in your comment, expr3 = a*b*c*h + d*f*g*h; expr4 = Inactive[Times] @@ (List @@ #)[[{2, 1, 4, 3}]] & /@ expr3  2 Adjusted for arbitrarily specified order edited May 3 at 1:53 Bob Hanlon 65.7k33 gold badges3737 silver badges101101 bronze badges expr = a b c h;  You need to inactivate Times to keep the factors from automatically being put in canonical order. expr2 = Inactive[Times] @@ Flatten[Reverse /@ Partition[List @@ expr, 2]]  expr == (expr2 // Activate) (* True *)  EDIT: For an arbitrarily specified order expr2 = Inactive[Times] @@ (List @@ expr)[[{2, 1, 4, 3}]]  expr = a b c h;  You need to inactivate Times to keep the factors from automatically being put in canonical order. expr2 = Inactive[Times] @@ Flatten[Reverse /@ Partition[List @@ expr, 2]]  expr == (expr2 // Activate) (* True *)  expr = a b c h;  You need to inactivate Times to keep the factors from automatically being put in canonical order. expr2 = Inactive[Times] @@ Flatten[Reverse /@ Partition[List @@ expr, 2]]  expr == (expr2 // Activate) (* True *)  EDIT: For an arbitrarily specified order expr2 = Inactive[Times] @@ (List @@ expr)[[{2, 1, 4, 3}]]  1 answered May 3 at 1:00 Bob Hanlon 65.7k33 gold badges3737 silver badges101101 bronze badges expr = a b c h;  You need to inactivate Times to keep the factors from automatically being put in canonical order. expr2 = Inactive[Times] @@ Flatten[Reverse /@ Partition[List @@ expr, 2]]  expr == (expr2 // Activate) (* True *)