public synchronized int processCombos(ConcurrentHashMap<ArrayList<ArrayList<Orb>>, String> map){
      int maxCombos = 0;
      ArrayList<ArrayList<Orb>> maxSequence = null;
      Set<ArrayList<ArrayList<Orb>>> keys = map.keySet();
      for (ArrayList<ArrayList<Orb>> key : keys) {
         int combos = 0;
         Orb[][] a = PADSolver.populateArray(key);
         for (int i = 0; i < Y; i++)
            for (int j = 0; j < X; j++) {
               try {
                  a[i][j].delete = false;
               } catch (NullPointerException e) {
                  for (int c = 0; c < Y; c++) {
                     for (int b = 0; b < X; b++) {
                        System.out.print(mArr[c][b]);
                     }
                     System.out.println();
                  }
                  System.out.println("Occured at Y : " + i + " and x : " + j);
               }
            }

         do { // counts the number of combos
            combos += countCombos(a); // gives blank map to fill in
         } while (skyFall(a));

         if (combos > maxCombos) {
            maxSequence = key;
            maxCombos = combos;
         }
//         if (combos > maxCombos) {
//            maxSequence = key;
//            maxCombos = combos;
//         }
//         else if(combos == maxCombos){
//            if(map.get(maxSequence).length() > map.get(key).length())
//               maxSequence = key;
//         }

      }
      /**
       * stub needs modification - gives simple result for now
       */
      try{
         System.out.println("The best result is : " + maxCombos
               + " with pattern : " + map.get(maxSequence));
      }
      catch(NullPointerException e){
         System.out.println("No real solution");
      }
      return maxCombos;
   }