       displayBoardAtStep(step)
       for blockView in boardView.subviews as! [BlockView] {
          // Find block in initial board corresponding to blockView
-         let block = solution!.initialBoard.first(where: {$0.id == blockView.id})!
+         let block = solution.initialBoard.first(where: {$0.id == blockView.id})!
          UIView.animate(
             withDuration: Const.boardViewResetAnimationDuration,
             delay: 0.0,

         completion: {[unowned self] done in
            if done && self.state == .solutionPlaying {
               self.step = index + 1
               if self.step < self.solution!.numMoves {
                  self.setStepLabel(self.step + 1)
               }
               if index == self.solution!.numMoves - 1 {
                  self.state = .atLastStep
               }
            }

      var statsText = ""
      if state == .noSolutionExists {
         statsText += "The puzzle was determined to be unsolvable after checking "
         statsText += "levels 0 to \(solution.numMoves) in "
      } else {
         statsText += "A solution was found at level \(solution.numMoves) in "
      }
      statsText += "\(String(format: "%.2f", solution.timeInterval)) seconds. "
      statsText += "Maximum queue size was \(solution.maxQSize) entries "
      statsText += "and final dictionary size was "
      statsText += "\(solution.numBoardsEnqueued) entries.\n\n"

      statsText += "Boards".rightAlign(inWidth: 17)
      statsText += "Boards".rightAlign(inWidth: 11)+"\n"
