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

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

Gincana

Toda semana Juquinha tem aulas de ACM (Artes Cênicas e Musicais) no colégio em que estuda e, recentemente, sua professora anunciou que haverá uma gincana no nal do semestre. No entanto, os times devem ser formados o mais breve possível para que os alunos possam ensaiar.

Cada time é constituído de um ou mais alunos, e cada aluno tem que pertencer a exatamente um time. Além disso, os times não podem ser formados de qualquer maneira: se um aluno é amigo de outro, esses alunos devem estar no mesmo time. A professora então pediu para que os alunos a informassem das relações de amizade na sala de aula.

Os alunos então se numeraram de 1 até N e escreveram uma lista cujas linhas contém pares de números. Se dois alunos cujos números são i e j são amigos, haverá ao menos uma linha contendo i e j ou j e i na lista. Inversamente, se há uma linha contendo i e j na lista, então os alunos cujos números são i e j são amigos.

A professora então recolheu a lista e, na próxima aula, deverá decidir que times formar. Ela está pensando em formar o maior número possível de times e gostaria de saber quantos times ela formaria. Ajude então a professora escrevendo um programa que, dada a lista de amizades, determina qual o maior número de times que ela pode formar.

Entrada

A primeira linha da entrada contém dois inteiros N e M que representam, respectivamente, o número de alunos na turma e o número de linhas na lista. As próximas M linhas contêm a lista de amizades. Cada linha contém dois inteiros I e J separados por exatamente um espaço.

Saída

Seu programa deve imprimir uma linha contendo o número máximo de times que podem ser formados pela professora.

Restrições

  • 1 ≤ N ≤ 1000
  • 0 ≤ M ≤ 5000
  • 1 ≤ I, J ≤ N

Exemplos

Entrada
3 1
1 3
Saída
2
Entrada
7 6
1 6
6 4
5 2
3 7
2 3
7 2
Saída
2
Tarefas Programação Nível Júnior
Promoção
logo sbc
Patrocínio
Apoio
Coordenação