Rainbow tables effectively solve the problem of collisions with ordinary hash chains by replacing the single reduction function R with a sequence of related reduction functions R1 through R"k". In this way, for two chains to collide and merge they must hit the same value "on the same iteration": consequently, the final values in these chain will be identical. A final postprocessing pass can sort the chains in the table and remove any "duplicate" chains that have the same final values as other chains. New chains are then generated to fill out the table. These chains are not "collision-free" (they may overlap briefly) but they will not merge, drastically reducing the overall number of collisions.