public static object[] Unflatten(int[] flatArray) { var list = new List <object>(); var stack = new Stack <int>(flatArray.Reverse()); while (stack.Count > 0) { var number = stack.First(); if (number < 3) { list.Add(number); stack.Pop(); } else { if (number > stack.Count) { number = stack.Count; } list.Add(stack.Take(number).ToArray()); for (int i = 0; i < number; i++) { stack.Pop(); } } } return(list.ToArray()); }