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("Jumps: " + string.Join(" ", resultSlow.Take(20)));
Console.WriteLine($"Execution Time: {watch.ElapsedMilliseconds} ms");
static List<int> fast(string inputNumbers)
string[] numberStrings = inputNumbers.Trim().Split(' ');
int numN = numberStrings.Length;
List<int> list = new List<int>(numN);
int[] numbers = new int[numN];
for (int i = 0; i < numN; i++)
numbers[i] = int.Parse(numberStrings[i]);
HashSet<int> set = new HashSet<int>();
Dictionary<int, int> map = new Dictionary<int, int>();
for (int i = 0; i < numN; i++)
initialJump = numbers[i];
for (int j = i + 1; j < numN; j++)
map[a] = counter + addValue;
var sortedDictionary = map.OrderBy(kv => kv.Key);
List<int> sortedValues = sortedDictionary.Select(kv => kv.Value).ToList();
static new 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++)