A Reversible Algorithm is a member of a pair of
transformation algorithms that iterate over their input sequence(s)
in opposite directions. For each reversible
algorithm x there exists a counterpart algorithm reverse_x,
that exhibits the exact semantics of x except that the elements
of its input sequence argument(s) are processed in the reverse
order.