change shuffle implementation to fisher-yates