 
    
    
         
Our first algorithm extends the paths from level 0 to level   by first extending all the paths from level 0 to level 1, then
from level 1 to level 2, and so on.  As we shall see, extending
the paths from one level to the next can be done in
 
by first extending all the paths from level 0 to level 1, then
from level 1 to level 2, and so on.  As we shall see, extending
the paths from one level to the next can be done in   bit
steps, so the total time is
  bit
steps, so the total time is   bit steps.
  bit steps.
In a multibutterfly with the   unshared-neighbors
property, it is relatively easy to extend paths from one level to the
next because paths at nodes with unshared neighbors can be extended
without worrying about blocking any other paths that are trying to
reach the next level.  The remaining paths can then be extended
recursively.  In particular, all the paths can be extended from
level l to level l+1 (for any l), by performing
a series of ``steps'', where each step consists of:
  unshared-neighbors
property, it is relatively easy to extend paths from one level to the
next because paths at nodes with unshared neighbors can be extended
without worrying about blocking any other paths that are trying to
reach the next level.  The remaining paths can then be extended
recursively.  In particular, all the paths can be extended from
level l to level l+1 (for any l), by performing
a series of ``steps'', where each step consists of:
  
 
Note that each step can be implemented in a constant number of bit steps.
Since the splitters connecting level l to level l+1 have   inputs, and at most
 
inputs, and at most   paths must be extended to the upper (or
lower) outputs, for
  paths must be extended to the upper (or
lower) outputs, for   , the number of inputs containing
these paths is at most
 , the number of inputs containing
these paths is at most   .  Thus, we can apply the
 .  Thus, we can apply the
  unshared-neighbors property to these nodes.  As a
consequence, in each step the number of paths still remaining to be
extended decreases by a
  unshared-neighbors property to these nodes.  As a
consequence, in each step the number of paths still remaining to be
extended decreases by a   factor.  After
  factor.  After   steps, no paths remain to be extended.
  steps, no paths remain to be extended.
By using the path-extension algorithm just described to extend all of the paths from level 0 to level 1, then all of the paths from level 1 to level 2, and so on, we can construct all the paths in
  
 
steps.