public String classifyLine(String line) {
    System.out.println("The line: " + line);
    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.probability(line); // get initial probability from the Markov Model.
      ++current;
    }

    // TEST
    for (int i = 0; i < genres.length; ++i) {
      System.out.println("\t" + genres[i] + " prob of " + probabilities[i]);
    }
    // END

    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;
      }
    }
    System.out.println("Classified as: " + genres[max]);
    return genres[max]; // returning corresponding genre.
  }