public void chooseValidInput() {
        Target tgt = this.getTgt();
        String zone = tgt.getZone();
        final boolean mandatory = target.getMandatory() ? target.hasCandidates() : false;

        if (zone.equals(Constant.Zone.Stack)) {
            // If Zone is Stack, the choices are handled slightly differently
            chooseCardFromStack(mandatory);
            return;
        }

        CardList choices = AllZoneUtil.getCardsInZone(zone).getValidCards(target.getValidTgts(), ability.getActivatingPlayer(), ability.getSourceCard());

        // Remove cards already targeted
        ArrayList<Card> targeted = tgt.getTargetCards();
        for (Card c : targeted) {
            if (choices.contains(c))
                choices.remove(c);
        }

        if (zone.equals(Constant.Zone.Battlefield)) {
            AllZone.getInputControl().setInput(input_targetSpecific(choices, true, mandatory));
        } else
            chooseCardFromList(choices, true, mandatory);
    }//input_targetValid