private SolveStateEnum solve() {
      try {
         boolean run1 = true;
         while (run1 && solveState != SolveStateEnum.ERROR) {
            int starCount = getStarCountInRiddle();
            checkByBlock();
            if (starCount <= getStarCountInRiddle()) {
               solveState = SolveStateEnum.MUST_GUESS;
               run1 = false;
            }
            // moegliche Loesung gefunden
            if (getStarCountInRiddle() == 0) {
               // direkte Loesung, da vorher nicht geraten wurde
               if (stacks == null || stacks.size() == 0) {
                  solveState = SolveStateEnum.SOLVED;
                  run1 = false;
                  if (isSolutionOk()) {
                     solutionsFromGuising.add(matrix);
                  } else {
                     solveState = SolveStateEnum.ERROR;
                  }
                  // andere Moeglichkeiten beim Raten testen!
               } else {
                  run1 = false;
                  if (isSolutionOk()) {
                     solutionsFromGuising.add(matrix);
                     solveState = SolveStateEnum.FOUND_SOLUTION_WITH_STACK;
                  } else {
                     solveState = SolveStateEnum.ERROR;
                  }
               }
            }
         }
      } catch (Exception e) {
         // e.printStackTrace();
         solveState = SolveStateEnum.ERROR;
      } 
      return solveState;
   }