Имеется

болтов и столько же гаек, отличающихся диаметрами. Нет ни двух болтов одинакового диаметра, ни двух гаек одинакового диаметра. Однако каждая гайка подходит по диаметру ровно к одному болту, и наоборот.
За одну операцию разрешается сравнить диаметры одного болта и одной гайки. Сравнивать между собой диаметры болтов или диаметры гаек непосредственно нельзя, только опосредованно: например, выяснив, что диаметр болта X больше диаметра гайки Y, а диаметр гайки Y больше диаметра болта Z, мы можем заключить, что диаметр болта X больше диаметра болта Z. "На глазок" тоже ничего не видно

Требуется определить, какому болту какая гайка подходит по диаметру.
Понятно, что можно тупо сравнить каждую гайку с каждым болтом, и дело в шляпе.
Интересует алгоритм, использующий менее, чем

операций.