private ArrayList<Object> split(String cost) {
        ArrayList<Object> list = new ArrayList<Object>();

        //handles costs like "3", "G", "GW", "10", "S"
        if (cost.length() == 1 || cost.length() == 2) {
            if (Character.isDigit(cost.charAt(0))) list.add(new Mana_PartColorless(cost));
            else if (cost.charAt(0) == 'S') list.add(new Mana_PartSnow());
            else if (cost.charAt(0) == 'P') list.add(new Mana_PartPhyrexian(cost));
            else list.add(new Mana_PartColor(cost));
        } else//handles "3 GW", "10 GW", "1 G G", "G G", "S 1"
        {
            //all costs that have a length greater than 2 have a space
            StringTokenizer tok = new StringTokenizer(cost);

            while (tok.hasMoreTokens())
                list.add(getManaPart(tok.nextToken()));

            //ManaPartColorless needs to be added AFTER the colored mana
            //in order for isNeeded() and addMana() to work correctly
            Object o = list.get(0);
            if (o instanceof Mana_PartSnow) {
                //move snow cost to the end of the list
                list.remove(0);
                list.add(o);
            }
            o = list.get(0);

            if (o instanceof Mana_PartColorless) {
                //move colorless cost to the end of the list
                list.remove(0);
                list.add(o);
            }
        }//else

        return list;
    }//split()