public static Input input_discardNumUnless(final int nCards, final String uType, SpellAbility sa) {
        final SpellAbility sp = sa;
        Input target = new Input() {
            private static final long serialVersionUID = 8822292413831640944L;

            int n = 0;

            @Override
            public void showMessage() {
                if (AllZone.getHumanHand().size() == 0) stop();
                AllZone.getDisplay().showMessage("Select " + (nCards - n) + " cards to discard, unless you discard a "
                        + uType + ".");
                ButtonUtil.disableAll();
            }

            @Override
            public void selectButtonCancel() {
                stop();
            }

            @Override
            public void selectCard(Card card, PlayerZone zone) {
                if (zone.is(Constant.Zone.Hand)) {
                    card.getController().discard(card, sp);
                    n++;

                    if (card.isType(uType.toString())) stop();

                    else {
                        if (n == nCards || AllZone.getHumanHand().size() == 0) stop();
                        else
                            showMessage();
                    }
                }
            }
        };

        return target;
    }//input_discardNumUnless