private static int findBestPropag() {

        // Find a person with just 1 relation
        int personWith1Relation = 0;
        for (Map.Entry<Integer, Set<Integer>> entry : relations.entrySet()) {
            if (entry.getValue().size() == 1) {
                personWith1Relation = entry.getKey();
                break;
            }
        }

        // Calcul propag of this person.
        Set<Integer> personsVisited = new HashSet<Integer>();
        personsVisited.add(personWith1Relation);
        List<Integer> lastPersonsVisited = Arrays.asList(personWith1Relation);
        int propag = 0;
        int sizeOfPersons = persons.size();

        // Algo de recherche en largeur.
        while (personsVisited.size() != sizeOfPersons) {

            List<Integer> nextPersons = new ArrayList<Integer>();

            for (Integer lastPersonVisited : lastPersonsVisited) {

                for (Integer nextPerson : relations.get(lastPersonVisited)) {
                    if (!personsVisited.contains(nextPerson)) {
                        nextPersons.add(nextPerson);
                        personsVisited.add(nextPerson);
                    }
                }
            }

            lastPersonsVisited = nextPersons;

            propag++;
        }

        // le minimum de propagation est le maximum divisé par deux.
        return (propag %2 == 0) ? propag / 2 : (propag+1) /2;
    }