public String classifyWhole(File file) {
    double[] probabilities = new double[genres.length]; // array of initial probabilities.
    int current = 0; // array counter.
    for (MarkovModel mm : mms) // for every MarkovModel in the array.
    {
      probabilities[current] =
          mm.probabilityWhole(file); // get initial probability from the Markov Model.
      ++current;
    }

    double[] realProbabilities = new double[genres.length]; // Array of calculated probabilities.
    int max = 0; // Pointer to maximum probability.
    for (int i = 0; i < genres.length; ++i) // Calculate probability for each genre.
    {
      double sum = 0;
      for (int j = 0; j < genres.length; ++j) // Sum of the probabilities in different genres.
      {
        sum += Math.exp(probabilities[j]);
      }
      realProbabilities[i] = Math.exp(probabilities[i]) / sum; // Calculating final probability.
      if (realProbabilities[i] > realProbabilities[max]) // recalculating max probability.
      {
        max = i;
      }
    }

    for (int i = 0; i < genres.length; ++i) {
      System.out.println(genres[i] + " : " + probabilities[i]);
    }

    return genres[max]; // returning corresponding genre.
  }