protected void doScry(final CardList topN, final int N) {
        int num = N;
        for (int i = 0; i < num; i++) {
            boolean bottom = false;
            if (topN.get(i).isBasicLand()) {
                CardList bl = AllZoneUtil.getPlayerCardsInPlay(AllZone.getComputerPlayer());
                bl = bl.filter(new CardListFilter() {
                    public boolean addCard(Card c) {
                        if (c.isBasicLand()) return true;

                        return false;
                    }
                });

                bottom = bl.size() > 5; // if control more than 5 Basic land, probably don't need more
            } else if (topN.get(i).isCreature()) {
                CardList cl = AllZoneUtil.getPlayerCardsInPlay(AllZone.getComputerPlayer());
                cl = cl.filter(new CardListFilter() {
                    public boolean addCard(Card c) {
                        if (c.isCreature()) return true;

                        return false;
                    }
                });

                bottom = cl.size() > 5;  // if control more than 5 Creatures, probably don't need more
            }
            if (bottom) {
                Card c = topN.get(i);
                AllZone.getGameAction().moveToBottomOfLibrary(c);
                //topN.remove(c);
            }
        }
        num = topN.size();
        for (int i = 0; i < num; i++) // put the rest on top in random order
        {
            Random rndm = MyRandom.random;
            int r = rndm.nextInt(topN.size());
            Card c = topN.get(r);
            AllZone.getGameAction().moveToLibrary(c);
            topN.remove(r);
        }
    }