A Nlogônia está implementando um novo sistema de transmissão de dados entre suas estações de pesquisa, numeradas de a . A infraestrutura da rede é econômica: existem exatamente cabos bidirecionais interligando as estações, de modo que sempre existe um único caminho simples entre qualquer par de estações.
Para garantir que as mensagens cheguem apenas a quem realmente faz parte do trajeto, os engenheiros criaram um mecanismo baseado em chaves de acesso:
Cada estação de pesquisa receberá uma lista de chaves de acesso.
Quando uma estação envia uma mensagem para outra estação , a mensagem é assinada com todas as chaves que e possuem em comum.
Uma estação só consegue ler e autorizar a passagem da mensagem se possuir todas as chaves usadas nessa assinatura. Caso duas estações não compartilhem nenhuma chave, qualquer estação da rede conseguirá ler a mensagem.
O comitê de segurança estabeleceu as seguintes regras para a distribuição das chaves:
Autorização no caminho: Toda estação que estiver no trajeto entre e (incluindo as próprias estações e ) deve possuir todas as chaves compartilhadas por e .
Bloqueio fora do caminho: Se uma estação não pertence ao trajeto entre e , deve haver pelo menos uma chave compartilhada por e que a estação não possua (impedindo que ela leia a mensagem).
Economia: O catálogo global pode conter no máximo tipos distintos de chaves em toda a rede.
Sua tarefa é ajudar a equipe de engenharia a definir quais chaves cada estação deve receber para cumprir todas as exigências.
A primeira linha da entrada contém um único inteiro (), representando o número de estações de pesquisa.
As linhas seguintes descrevem as conexões da rede. Cada linha contém dois inteiros e (, ), indicando que existe um cabo ligando diretamente as estações e . É garantido que a rede forma uma árvore.
Na primeira linha, imprima um único inteiro (), indicando o total de chaves distintas criadas. As chaves devem ser identificadas por inteiros de a .
Nas próximas linhas, descreva a lista de chaves de cada estação de até . A -ésima dessas linhas deve começar com um inteiro () indicando a quantidade de chaves da estação , seguido por inteiros distintos representando as chaves entregues à estação .
É garantido que existe pelo menos uma atribuição válida de chaves. Se houver mais de uma, qualquer uma será aceita.
3 1 2 2 3
4 2 1 3 2 2 3 2 2 4
A rede é uma linha 1 − 2 − 3 com N = 3, permitindo até 2(3) = 6 chaves (o exemplo utiliza 4 chaves):
A estação 1 possui as chaves {1, 3}.
A estação 2 possui as chaves {2, 3}.
A estação 3 possui as chaves {2, 4}.
Testando as comunicações entre cada par de estações:
Comunicação entre 1 e 3: A lista de chaves comuns é vazia. Como a assinatura não contém chaves, a estação 2 está automaticamente autorizada a processar a mensagem (e de fato 2 pertence ao trajeto entre 1 e 3).
Comunicação entre 1 e 2: A única chave comum é a chave 3. A estação 3 não possui a chave 3, logo 3 é bloqueada (e de fato 3 não pertence ao trajeto entre 1 e 2).
Comunicação entre 2 e 3: A única chave comum é a chave 2. A estação 1 não possui a chave 2, logo 1 é bloqueada (e de fato 1 não pertence ao trajeto entre 2 e 3).