public function solve():void {
  txtResult.text = "";
  // Create array of permutations of students.
  var p:Array = permutations(students.split(""));
  // Check every possibility.
  for (var k:int = 0; k <= p.length; ++k) {
    var s1:int = singleCorrectPredictions(p[k], guess1.split(""))
    var d1:int = doubleConsecutivePredictions(p[k], guess1.split(""))
    var s2:int = singleCorrectPredictions(p[k], guess2.split(""))
    var d2:int = doubleConsecutivePredictions(p[k], guess2.split(""))
    if ((s1 == 0) && (d1 == 0) && (s2 == 2) && (d2 == 2)) {
      // Conditions satisfied, print solution!
      txtResult.text += p[k] + "\n";
    }
  }
}

private function singleCorrectPredictions(master:Array, guess:Array):int {
  var rt:int = 0;
  for (var k:int = 0; k <= guess.length; ++k) {
    rt += (guess[k] == master[k])? 1 : 0;
  }
  return rt;
}

private function doubleConsecutivePredictions(master:Array, guess:Array):int {
  var rt:int = 0;
  for (var i:int = 0; i <= guess.length - 1; ++i) {
    for (var j:int = 0; j <= master.length - 1; ++j) {
      if ((guess[i] == master[j]) && (guess[i + 1] == master[j + 1])) {
        ++rt;
        break;  // breaking here because elements are different.
      }
    }
  }
  return rt;
}