public static List<Long>  triggerAfterSubmissionEvaluation(Submission submission) {
		Problem problem = submission.getProblem();
        if (problem==null){
            throw new IllegalArgumentException("Problem cannot be null");
        }
        if (problem.getId()==0){
            throw new IllegalArgumentException("A problem with id 0 is not valid. It must be greater than 1");
        }
        if (submission.getId()==0){
            throw new IllegalArgumentException("Submission must be persistent, an id=0 is not allowed");
        }

		// Atualiza a tabela de cache da informacao se o usuario ja acertou um
		// determinado problema
		updateUserProblem(submission);

		// atualiza as informacoes do perfil do usuario (num. de problemas
		// tentados, numero de problemas corretos)
		updateProfile(submission.getUserId());

		// atualiza no perfil a quantidade de submissões do usuario
		// updateProfileSubmissionCount(submission.getUserId()); //nao precisa
		// mais, atualizei tbm no updateProfile

		if (submission.isEvaluationCorrect()) {
			// Só precisa atualizar se o tempo for realmente menor
            double currentFastestSubmission = problem.getFastestSubmissionTime();
            if (currentFastestSubmission<=0) currentFastestSubmission = Double.MAX_VALUE;
			if (submission.getTime() < currentFastestSubmission) {
				updateFastSubmissionProblem(submission);
			}
		}

		QuestionnaireDao questDao = new QuestionnaireDaoMySQL();

		// recupera todos os questionários abertos do usuário que fez a
		// submissão
		ArrayList<Long> questIdList = questDao
				.getQuestBySub(submission.getId());

		if (questIdList != null) {
			for (Long questId : questIdList) {
				// para cada questionário, recupera os problemas que ele acertou
				ArrayList<Long> problemIdList = questDao.getProblemCorrect(
						questId, submission.getId());
				/*
				 * Caso o aluno não tenha acertado algum problema do
				 * questionário problemIdList será uma lista vazia. Neste caso a
				 * nota do aluno será 0
				 */

				if (problemIdList != null) {
					String problems = problemIdList.toString();
					problems = problems.replace('[', '(');
					problems = problems.replace(']', ')');
					// atualiza a nota do aluno
					questDao.updateScore(problems, submission.getId(), questId);
				} else {
					// atualiza nota
					questDao.updateScoreWithEmptyProbList(submission.getId(),
							questId);
				}

			}
		}
		return questIdList;
	}