procedure main()
  shared male_enter := semaphore(1)
  shared female_enter := semaphore(1)
  shared pair := barrier(2)

  while read genre do
    case genre of
      'M': create_thread(male)
      'W': create_thread(female)
    end case
  end while
end procedure

procedure male()
  wait(male_enter)
  wait(pair)
  signal(male_enter)
  dance()
end procedure

procedure female()
  wait(female_enter)
  wait(pair)
  signal(female_enter)
  dance()
end procedure
