using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
static void Main(string[] args)
var list = new List<int>(numN);
var sb = new StringBuilder();
for (int i = 0; i < numN; i++)
sb.Append($"{rand.Next(numN)} ");
string inputString = sb.ToString();
Console.WriteLine("Input: " + inputString.Substring(0,50));
var watch = new System.Diagnostics.Stopwatch();
resultSlow = Program.slow(inputString);
resultFast = Program.fast(inputString);
if (!Enumerable.SequenceEqual(resultSlow, resultFast))
Console.WriteLine("Error!!! Not Equal results!");
Console.WriteLine("Max Jumps: " + resultSlow.Max());
Console.WriteLine("Max Jumps fast: " + resultFast.Max());
Console.WriteLine("Jumps: " + string.Join(" ", resultSlow.Take(20)));
Console.WriteLine($"Execution Time: {watch.ElapsedMilliseconds} ms");
static List<int> fast(String inputNumbers)
var numbers = inputNumbers.Trim().Split().Select(int.Parse).ToArray();
int numN = numbers.Count();
var list = new List<int>(numN);
int counter = 0, max = numbers.Max();
Dictionary<int,int> map = new Dictionary<int,int>();
Stack stack = new Stack();
for (int i = 0; i < numN; i++)
initialJump = numbers[i];
for (int j = i + 1; j < numN; j++)
if(map.ContainsKey(numbers[j])) {
list.Add(map[numbers[j]]);
for(int a =0; a<counter -1;a++) {
int key = (int)stack.Pop();
if(!map.ContainsKey(key)) {
static List<int> slow(String inputNumbers)
var numbers = inputNumbers.Trim().Split().Select(int.Parse).ToArray();
int numN = numbers.Count();
var list = new List<int>(numN);
int counter = 0, max = numbers.Max();
for (int i = 0; i < numN; i++)
initialJump = numbers[i];
for (int j = i + 1; j < numN; j++)