Tarefa 5 - Matrioscas generalizadas

Prazo de entrega recomendado:

Você deve construir bonecas russas de acordo com algumas regras de empilhamento.


Vladimir trabalhou por muitos anos fazendo matrioscas, aquelas bonecas aninhadas que representam o ofício russo. Uma matriosca é uma boneca que pode ser aberta, de modo que dentro dela se encontre uma outra boneca. Então, esta segunda boneca pode ser novamente aberta para se encontrar outra. Este processo pode ser repetido até que uma boneca final, que não pode ser aberta, seja encontrada.

Há algum tempo, ele teve a ideia de bonecas matrioscas generalizadas para brinquedos aninhados. Dessa forma, quando uma boneca é aberta, ela pode conter uma ou mais bonecas diretamente em seu interior. Esses novos brinquedos são chamados de matrioscas generalizadas.

Cada brinquedo corresponde a um número inteiro positivo. Quando abrimos um brinquedo do tipo $k$, encontramos brinquedos menores correspondentes a números $n_1, n_2, …, n_r$.

Se uma boneca do tipo $k$ puder ser aberta, então a soma das bonecas contidas diretamente nela deve ser exatamente $k - 1$, de forma que as menores se encaixem perfeitamente no interior. Se a soma fosse maior, então as bonecas menores não caberiam em $k$ e, se fosse menor, então a boneca $k$ estaria incompleta.

Já prevendo o sucesso de seu brinquedo, Vladimir gostaria de construir diversos conjuntos de bonecas, cada um vendido separadamente. Para simplificar a produção, cada conjunto será representado por uma sequência de inteiros de forma que a sequência para uma boneca do tipo $k$ começa com o número positivo $k$ e termina com o número negativo $-k$. Entre esses números, há uma ou mais sequências correspondentes às bonecas menores.

Você deve construir um programa matrioscas que verifique se uma dada sequência proposta por Vladimir representa de fato um conjunto de matrioscas generalizadas.

Entrada

A primeira linha da entrada contém o tipo da maior matriosca da sequência. A próxima linha contém uma sequência representando um conjunto de matrioscas generalizadas.

5
5 1 -1 3 1 -1 1 -1 -3 -5

Saída

Se a sequencia for válida, então o programa deve mostrar, para cada boneca presente na sequência, o número de bonecas contidas diretamente, conforme exemplo. As linhas devem estar ordenadas pelo tipo da boneca.

1 contem 0 bonecas
3 contem 2 bonecas
5 contem 2 bonecas

Pode ser que a sequência não seja válida. Isso acontece quando os números não estão aninhados corretamente, ou quando as bonecas menores não se encaixam perfeitamente. Nesse caso, a saída deve conter apenas uma mensagem sequencia invalida.

Dicas

Para ler uma sequência de inteiros até o final de arquivo, você pode consultar o resultado de scanf; leia a documentação. Por exemplo:

while (scanf("%d", ...) != EOF) {
    ...
}

Critérios

É obrigatório resolver o problema utilizando uma pilha.

Correção

Esta tarefa será corrigida automaticamente sempre que você realizar um git push. Depois de terminada a tarefa, deve-se utilizar o botão na interface de notas para solicitar a correção de um monitor.