private boolean processLog() throws UnknownPlayerException
                                      , UnknownCardException
                                      , ContradictionException {
        boolean tableModified = false;
        for (LogEntry logEntry : log) {
            if (logEntry instanceof Accusation) {
                boolean doAccusation = solveAskerHasNoCardsFromAccusation((Accusation)logEntry);
                boolean solveAccusationValue = solveUnsuccessfulAccusation((Accusation)logEntry);
                tableModified = tableModified || solveAccusationValue;
                tableModified = tableModified || doAccusation;
            } else if (logEntry instanceof SetCard) {
                SetCard s = (SetCard) logEntry;
                int playerNumber = playerOrd(s.player);
                int cardNumber = cardSet.ordinal(s.card);
                setPlus(cardNumber, playerNumber);
            } else {
                Suggestion suggestion = (Suggestion) logEntry;
                boolean solveRepliersHaveValue = solveRepliersHave(suggestion);
                boolean solveReplierHasNoCardsValue = solveReplierHasNoCards(suggestion);
                boolean solveOnlyOneUnknownValue = solveOnlyOneUnknown(suggestion);
                boolean solveThreeCardsReplied = solveThreeCardsReplied(suggestion);

                tableModified = tableModified || solveRepliersHaveValue;
                tableModified = tableModified || solveReplierHasNoCardsValue;
                tableModified = tableModified || solveOnlyOneUnknownValue;
                tableModified = tableModified || solveThreeCardsReplied;
            }
        }
        return tableModified;
    }