Запускаем две процедуры, перечисляющие A и B. Шаги обоих процессов чередуем. В каждый момент мы помним список всех перечисленных слов для каждого из множеств. Когда получаем очередное слово u из A, печатаем все пары вида (u,v), где v пробегает множество уже "прозвучавших" слов из B. Аналогично для случая появления нового слова из B.
Запускаем две процедуры, перечисляющие A и B. Шаги обоих процессов чередуем. В каждый момент мы помним список всех перечисленных слов для каждого из множеств. Когда получаем очередное слово u из A, печатаем все пары вида (u,v), где v пробегает множество уже "прозвучавших" слов из B. Аналогично для случая появления нового слова из B.
Пошаговое объяснение: