cycle detection algorithm