public ActionResult Upload(UploadInput input)
        {
            if (!ModelState.IsValid)
            {
                return(View(input));
            }

            try
            {
                using (var streamReader = new StreamReader(input.RectanglesFile.InputStream))
                {
                    var rectanglesString = streamReader.ReadToEnd();
                    var grid             = gridService.InitialiseGridFromString(rectanglesString);

                    var model = new SolutionRectanglesDisplay(grid, grid.GetMinimumVerticallyStackedRectangles());
                    return(View("Solution", model));
                }
            }
            catch (LogicException ex)
            {
                ModelState.AddLogicErrors(ex);
                return(View(input));
            }
        }