private static IEnumerable<IEnumerable<Tuple<int, int>>> GetRoutes(Triangle triangle, Tuple<int,int> startingPosition)
        {
            var positionsOnNextRow = triangle.GetPositionsOnNextRow(startingPosition).ToList();

              if (!positionsOnNextRow.Any())
              {
            yield return new[] {startingPosition};
            yield break;
              }

              foreach (var nextPosition in positionsOnNextRow)
              {
            foreach (var route in GetRoutesMemo(triangle, nextPosition))
            {
              yield return route.Concat(new[] {startingPosition});
            }
              }
        }