public static Input input_discard(final int nCards, SpellAbility sa) {
        final SpellAbility sp = sa;
        Input target = new Input() {
            private static final long serialVersionUID = -329993322080934435L;

            int n = 0;

            @Override
            public void showMessage() {
                if (AllZone.getHumanHand().size() == 0) stop();
                if (nCards == 0) stop();

                AllZone.getDisplay().showMessage("Select a card to discard");
                ButtonUtil.disableAll();
            }

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

                    //in case no more cards in hand
                    if (n == nCards || AllZone.getHumanHand().size() == 0) stop();
                    else
                        showMessage();
                }
            }
        };
        return target;
    }//input_discard()