XXVI Olimpíada Brasileira de Informática
Submeta sua solução

Nome do arquivo: linhas.x, onde x deve ser c, cpp, java, js ou py

Linhas de Ônibus

Nessa grande cidade na China, há T terminais de ônibus, numerados de 1 a T; e L linhas de ônibus,numeradas de 1 a L. Os mapas são muito confusos mas conseguimos entender que os ônibus de uma linha fazem viagens circulares passando por um conjunto fixo de terminais. Por exemplo, a tabela seguinte indica o conjunto de terminais por onde passam os ônibus de cada linha, para T=10 e L=5:

LinhaConjunto de Terminais
1 {4,3,8,2,1}
2 {5,10,7}
3 {1,5}
4 {6,8,10}
5 {9,4,5}

Não estamos preocupados com o trajeto da linha, com a ordem na qual o ônibus passa pelos terminais. Portanto, para ir do terminal 2 para o terminal 4, precisamos apenas tomar um ônibus da linha 1 e esperar até ele chegar no terminal 4. O sistema garante que é possível viajar entre qualquer par de terminais, mas talvez seja preciso trocar de linha de ônibus algumas vezes.

Nós estamos com medo de tomar um ônibus errado e acabar perdidos na cidade. É tudo muito grande na China! Por isso, queremos trocar de ônibus o menor número possível de vezes. Por exemplo, você pode ir do terminal 2 para o terminal 10 primeiro tomando a linha 1 até o terminal 1, depois a linha 3 até o terminal 5 e, por fim, a linha 2 até o terminal 10; trocando de ônibus duas vezes, usando três linhas no total. Só que dá para ir do terminal 2 para o 10 trocando apenas uma vez: primeiro tomando a linha 1 até o terminal 8 e depois a linha 4 até o terminal 10.

Neste problema, dados os conjuntos de terminais de cada linha, um terminal origem e um terminal destino, seu programa deve computar o número mínimo possível de linhas de ônibus para fazer a viagem.

Entrada

A primeira linha da entrada contém quatro inteiros, T, L, O e D, representando, respectivamente, o número de terminais, o número de linhas de ônibus, o terminal origem e o terminal destino. As últimas L linhas da entrada descrevem, cada uma, o conjunto de terminais pelos quais uma linha de ônibus passa. A i-ésima linha (dessas últimas L linhas da entrada) descreve o conjunto de terminais da linha de ônibus i, no seguinte formato: o primeiro inteiro na linha, C, indica o número de terminais no conjunto. Depois desse inteiro, o restante da linha da entrada contém C inteiros distintos representando os terminais.

Saída

Seu programa deve produzir uma única linha, contendo apenas um inteiro, o número mínimo possível de linhas de ônibus para viajar do terminal O para o terminal D.

Restrições

  • 2 ≤ T ≤ 500
  • 1 ≤ L ≤ 500
  • 2 ≤ C ≤ T
  • O &neq; D

Informações sobre a pontuação

  • Em um conjunto de casos de teste somando 5 pontos, L = 2
  • Em um conjunto de casos de teste somando outros 5 pontos, T = 3
  • Em um conjunto de casos de teste somando outros 10 pontos, T ≤ 10
  • Em um conjunto de casos de teste somando outros 20 pontos, T ≤ 100
  • Em um conjunto de casos de teste somando outros 20 pontos, C ≤ 10
  • Em um conjunto de casos de teste somando os demais 40 pontos, nenhuma restrição adicional

Exemplos

Exemplos

Entrada
10 5 2 10
5 4 3 8 2 1
3 5 10 7
2 1 5
3 6 8 10
3 9 4 5
Saída
2
	

 

Entrada
2 1 1 2
2 2 1
Saída
1
	

 

Entrada
10 9 1 10
2 1 2
2 2 3
2 3 4
2 4 5
3 5 6 7
2 6 7
2 7 8
2 8 9
2 9 10
Saída
8
	

 

Tarefas Programação Nível 1
Promoção:
sbc
Patrocínio
 
Apoio
 
Coordenação