import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class Pizza {
    private static final Map<String, Integer> quantidadesPorIngrediente = new HashMap<>();

    private final List<String> ingredientes;

    public Pizza() {
        ingredientes = new ArrayList<>();
    }

    private static void contabilizaIngrediente(String ingrediente) {
        quantidadesPorIngrediente.compute(ingrediente, (k, v) -> v == null ? 1 : v + 1);
    }

    public void adicionaIngrediente(String ingrediente) {
        ingredientes.add(ingrediente);
        contabilizaIngrediente(ingrediente);
    }

    public boolean temIngredientes() {
        return !ingredientes.isEmpty();
    }

    public int getPreco() {
        int quantidadeIngredientes = ingredientes.size();
        return quantidadeIngredientes <= 2 ? 15 : quantidadeIngredientes <= 5 ? 20 : 23;
    }

    public static Map<String, Integer> getQuantidadesPorIngrediente() {
        return quantidadesPorIngrediente;
    }
}

class CarrinhoDeCompras {
    private final List<Pizza> pizzas;

    public CarrinhoDeCompras() {
        pizzas = new ArrayList<>();
    }

    public void adiciona(Pizza p) {
        if (!p.temIngredientes()) throw new IllegalArgumentException();
        pizzas.add(p);
    }

    public int getPreco() {
        int total = 0;
        for (Pizza p : pizzas) {
            total += p.getPreco();
        }
        return total;
    }
}

class Principal {
    public static void main(String[] args) {
        Pizza marguerita = new Pizza();
        marguerita.adicionaIngrediente("Queijo");
        marguerita.adicionaIngrediente("Tomate");
        marguerita.adicionaIngrediente("Orégano");

        Pizza portuguesa = new Pizza();
        portuguesa.adicionaIngrediente("Queijo");
        portuguesa.adicionaIngrediente("Presunto");
        portuguesa.adicionaIngrediente("Ovo");
        portuguesa.adicionaIngrediente("Calabresa");
        portuguesa.adicionaIngrediente("Cebola");
        portuguesa.adicionaIngrediente("Tomate");

        Pizza brigadeiro = new Pizza();
        brigadeiro.adicionaIngrediente("Brigadeiro derretido");

        CarrinhoDeCompras c1 = new CarrinhoDeCompras();
        c1.adiciona(marguerita);
        c1.adiciona(portuguesa);
        c1.adiciona(brigadeiro);
        System.out.println("Preço do carrinho: " + c1.getPreco());

        for (Map.Entry<String, Integer> entry : Pizza.getQuantidadesPorIngrediente().entrySet()) {
            System.out.println("O ingrediente " + entry.getKey() + " foi usado " + entry.getValue() + " vezes.");
        }
    }
}