// Path: src/shaft/poker/game/Card.java
// public class Card implements Comparable<Card> {
// 
//     public enum Rank {
//         DEUCE,
//         THREE,
//         FOUR,
//         FIVE,
//         SIX,
//         SEVEN,
//         EIGHT,
//         NINE,
//         TEN,
//         JACK,
//         QUEEN,
//         KING,
//         ACE
//     }
//     
//     public enum Suit {
//         CLUBS,
//         SPADES,
//         HEARTS,
//         DIAMONDS
//     }
//     
//     private final Rank _rank;
//     private final Suit _suit;
//     private static final List<Card> _values = new ArrayList<Card>(Rank.values().length * Suit.values().length) {
//         {
//             for (Suit suit : Suit.values()) {
//                 for (Rank rank : Rank.values()) {
//                     add(new Card(rank, suit));
//                 }
//             }
//         }
//     };
//     
//     public Card(Rank rank, Suit suit) {
//         _rank = rank;
//         _suit = suit;
//     }
//     
//     @Override
//     public String toString() {
//         return _rank.toString() + " of " + _suit.toString();
//     }
//     
//     public Rank rank() {
//         return _rank;
//     }
//     
//     public Suit suit() {
//         return _suit;
//     }
//     
//     public static List<Card> values() {
//         return _values;
//     }
//     
//     @Override
//     public int compareTo(Card o) {
//         if (_rank.ordinal() > o._rank.ordinal()) {
//             return 1;
//         }
//         else if (_rank.ordinal() < o._rank.ordinal()) {
//             return -1;
//         }
//         return 0;
//     }
// 
// }


import java.util.ArrayList;
import java.util.List;
import shaft.poker.game.Card;
            }
        }
        
        for (Card c1 : c1Candidates) {
            c2Candidates.remove(c1);
                       
            for (Card c2 : c2Candidates) {
                if (c1.suit() != c2.suit()) {
                        if (!weakSuits.contains(c1.suit())
                                && !weakSuits.contains(c2.suit())) {
                            
                            boolean redundant = false;
                            int weight = 1;
                            if (!strongSuits.contains(c1.suit())
                                    && !strongSuits.contains(c2.suit())) {
                                for (EnumCandidate cand : holeCandidates) {
                                    if (cand.contentsEquals(c1, c2, true)) {
                                        redundant = true;
                                        break;
                                    }
                                }
                                if (!redundant) {
                                    // Non redundant generic hand, compute weight using count of cards left in the deck
                                    // minus suited hands or hands with a strong suit card
                                    if (c1.rank() != c2.rank()) {
                                        weight = cardsLeft[c1.rank().ordinal()] * cardsLeft[c2.rank().ordinal()]
                                                - (weakSuits.size() * (cardsLeft[c1.rank().ordinal()] + cardsLeft[c2.rank().ordinal()]))
                                                - (strongSuits.size() * (cardsLeft[c1.rank().ordinal()] - 1))
                                                - (strongSuits.size() * (cardsLeft[c2.rank().ordinal()] - 1));
                                    }
// Path: src/shaft/poker/game/Card.java
// public class Card implements Comparable<Card> {
// 
//     public enum Rank {
//         DEUCE,
//         THREE,
//         FOUR,
//         FIVE,
//         SIX,
//         SEVEN,
//         EIGHT,
//         NINE,
//         TEN,
//         JACK,
//         QUEEN,
//         KING,
//         ACE
//     }
//     
//     public enum Suit {
//         CLUBS,
//         SPADES,
//         HEARTS,
//         DIAMONDS
//     }
//     
//     private final Rank _rank;
//     private final Suit _suit;
//     private static final List<Card> _values = new ArrayList<Card>(Rank.values().length * Suit.values().length) {
//         {
//             for (Suit suit : Suit.values()) {
//                 for (Rank rank : Rank.values()) {
//                     add(new Card(rank, suit));
//                 }
//             }
//         }
//     };
//     
//     public Card(Rank rank, Suit suit) {
//         _rank = rank;
//         _suit = suit;
//     }
//     
//     @Override
//     public String toString() {
//         return _rank.toString() + " of " + _suit.toString();
//     }
//     
//     public Rank rank() {
//         return _rank;
//     }
//     
//     public Suit suit() {
//         return _suit;
//     }
//     
//     public static List<Card> values() {
//         return _values;
//     }
//     
//     @Override
//     public int compareTo(Card o) {
//         if (_rank.ordinal() > o._rank.ordinal()) {
//             return 1;
//         }
//         else if (_rank.ordinal() < o._rank.ordinal()) {
//             return -1;
//         }
//         return 0;
//     }
// 
// }


// Path: src/shaft/poker/agent/enumerationtools/EnumCandidate.java
import java.util.ArrayList;
import java.util.List;
import shaft.poker.game.Card;

            }
        }
        
        for (Card c1 : c1Candidates) {
            c2Candidates.remove(c1);
                       
            for (Card c2 : c2Candidates) {
                if (c1.suit() != c2.suit()) {
                        if (!weakSuits.contains(c1.suit())
                                && !weakSuits.contains(c2.suit())) {
                            
                            boolean redundant = false;
                            int weight = 1;
                            if (!strongSuits.contains(c1.suit())
                                    && !strongSuits.contains(c2.suit())) {
                                for (EnumCandidate cand : holeCandidates) {
                                    if (cand.contentsEquals(c1, c2, true)) {
                                        redundant = true;
                                        break;
                                    }
                                }
                                if (!redundant) {
                                    // Non redundant generic hand, compute weight using count of cards left in the deck
                                    // minus suited hands or hands with a strong suit card
                                    if (c1.rank() != c2.rank()) {
                                        weight = cardsLeft[c1.rank().ordinal()] * cardsLeft[c2.rank().ordinal()]
                                                - (weakSuits.size() * (cardsLeft[c1.rank().ordinal()] + cardsLeft[c2.rank().ordinal()]))
                                                - (strongSuits.size() * (cardsLeft[c1.rank().ordinal()] - 1))
                                                - (strongSuits.size() * (cardsLeft[c2.rank().ordinal()] - 1));
                                    }
                                    else {