WikiPrépaLivrets

Mines Option Informatique MP 2024Sujet et rapport du jury

Pas encore noté
  • Relations d'ordre
  • Tri topologique
  • Structures de données (tas)
  • Complexité algorithmique
  • Graphes bipartis et couplage
  • Programmation OCaml impérative et fonctionnelle

Téléchargements

  • Corrigé : pas encore disponible

Présentation du sujet

Algorithmique des relations d'ordre : tri topologique, chaînes, antichaînes et couverture minimum
Afficher ou masquer la section

Le problème porte sur l'algorithmique et la programmation en OCaml de résultats liés aux relations d'ordre sur un ensemble fini. Il se découpe en trois parties indépendantes : la vérification des propriétés d'une relation d'ordre puis un tri topologique, la manipulation de chaînes et d'antichaînes, et enfin la construction d'une couverture minimum de l'ensemble par des chaînes disjointes via un graphe biparti.

  1. 11. Relation d'ordre et tri topologiqueVérification algorithmique des propriétés d'une relation d'ordre, puis programmation et analyse d'un tri topologique.
  2. 22. Chaînes et antichaînesAppropriation et correction de codes fournis pour tester si une liste de sommets est une chaîne ou une antichaîne.
  3. 33. Couverture par des chaînesConstruction d'un graphe biparti associé à l'ensemble ordonné et utilisation d'un couplage de cardinal maximum pour obtenir une couverture minimum par des chaînes disjointes.

L'épreuve en chiffres

Moyenne 10,93 / 20 · écart-type 3,28 · 1 574 présents · où vous situez-vous ?
Afficher ou masquer la section
Moyenne
10,93/ 20
Écart-type
3,28
Présents
1 574
Coefficient
2
Durée
3 h
moyenne 10,9305101520
Deux tiers des copies environ (moyenne ± écart-type)

Votre note sur 20 à ce sujet, en conditions de concours.

Source : document officiel du concours, épreuve du 15 mai 2024. Notes publiées par le concours (après harmonisation le cas échéant). Courbe : estimation par une loi normale.

Ce qu'a observé le jury

6 erreurs relevées
Difficultés sur les vérifications élémentaires d'une relation d'ordre · Principe du tri topologique mal compris · Mauvaise réutilisation du résultat précédent
Afficher ou masquer la section

Le sujet, composé de 25 questions en trois parties, a donné des résultats contrastés : la première partie sur les vérifications élémentaires et le tri topologique a posé des difficultés, la deuxième sur les chaînes et antichaînes a été globalement bien traitée, et la troisième sur la couverture minimum a été souvent abordée mais rarement réussie.

Les erreurs les plus sanctionnées

  1. 1
    Difficultés sur les vérifications élémentaires d'une relation d'ordre

    De nombreux candidats ont eu du mal avec les premières questions de programmation élémentaire (réflexivité, antisymétrie, transitivité).

    « Nous avons constaté que de nombreux candidats éprouvaient des difficultés sur ces premières questions de programmation élémentaire »
  2. 2
    Principe du tri topologique mal compris

    Peu de candidats ont saisi le principe de l'algorithme et n'ont pas vérifié leur interprétation sur un exemple simple, ce qui leur aurait permis de repérer leur erreur.

    « Peu de candidats ont compris le principe et n'ont sans doute pas cherché à vérifier l'interprétation qu'ils en faisaient sur un exemple simple »
  3. 3
    Mauvaise réutilisation du résultat précédentQ9

    À la question 9, la majorité des candidats se contente de classer les nœuds par degré au lieu d'exploiter correctement le résultat de la question 8.

    « La question précédente est mal utilisée : la très grande majorité des candidats se contente de classer les nœuds par degré »
  4. 4
    Connaissance insuffisante des tasQ14

    La question 14 attendait une référence détaillée aux connaissances sur les tas pour justifier une complexité en O(γ log γ) ; elle a été très peu traitée ou mal comprise.

    « Question très peu traitée ou mal comprise »
  5. 5
    Couverture minimum souvent abordée mais rarement réussiePartie 3

    La construction du graphe biparti et son exploitation pour obtenir une couverture minimum par chaînes disjointes sont souvent tentées mais rarement menées à bien.

    « questions souvent abordées, mais rarement bien faites »
  6. 6
    Copies mal présentées ou illisibles

    Certaines copies sans indentation, avec de grosses ratures et des renvois par flèches en bas de page, sont très difficiles à interpréter pour le correcteur.

    « Plusieurs copies restent malgré tout mal présentées, voire même illisibles, pour le correcteur, sans indentation, avec de grosses ratures »

Ce qui a été bien réussi

  • La deuxième partie sur les chaînes et antichaînes a été globalement bien traitée.
  • La programmation récursive de la question 2 est généralement bien faite.
  • Les questions de synthèse (Q5 et Q24) ont été bien comprises ou bien traitées.
  • Les programmes respectent en général les règles d'indentation, et plusieurs copies utilisent des fonctions auxiliaires pour décomposer le code.

Conseils du jury

  • Vérifier l'interprétation d'un algorithme sur un exemple simple avant de conclure à sa correction.
  • Choisir des noms de variables et de fonctions significatifs, à l'image des concepteurs du sujet.
  • Décomposer un programme long en fonctions auxiliaires bien nommées.
  • Ajouter des commentaires pour expliciter la compréhension du sujet, ce qui aide le correcteur à évaluer la copie.
  • Soigner la présentation du code : indentation claire, sans ratures ni renvois complexes.

Synthèse rédigée par WikiPrépa à partir du rapport officiel du jury (à télécharger en PDF). Les citations sont extraites du rapport.

Ces sujets peuvent vous intéresser

Pas encore de corrigé pour ce sujet : voici des sujets proches corrigés.

Lecture du sujet en ligne

L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.
Afficher ou masquer la section

ÉCOLE DES PONTS PARISTECH, ISAE-SUPAERO, ENSTA PARIS, TÉLÉCOM PARIS, MINES PARIS, MINES SAINT-ÉTIENNE, MINES NANCY, IMT ATLANTIQUE, ENSAE PARIS, CHIMIE PARISTECH - PSL.
Concours Mines-Télécom, Concours Centrale-Supélec (Cycle International).

CONCOURS 2024

Durée de l'épreuve : 3 heures

L'usage de la calculatrice et de tout dispositif électronique est interdit.

ÉPREUVE D'INFORMATIQUE MP

Cette épreuve concerne uniquement les candidats de la filière MP.
Les candidats sont priés de mentionner de façon apparente
sur la première page de la copie :
INFORMATIQUE - MP
L'énoncé de cette épreuve comporte 7 pages de texte.
Si, au cours de l'épreuve, un candidat repère ce qui lui semble être une erreur d'énoncé, il le signale sur sa copie et poursuit sa composition en expliquant les raisons des initiatives qu'il est amené à prendre.
Les sujets sont la propriété du GIP CCMP. Ils sont publiés sous les termes de la licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 3.0 France.

Préliminaires

L'épreuve est formée d'un problème unique, constitué de 25 questions, qui porte sur l'algorithmique de quelques résultats mathématiques reliés à la notion de relation d'ordre. Le problème est divisé en trois sections qui peuvent être traitées séparément, à condition d'avoir lu les définitions introduites jusqu'à la question traitée.
Dans tout l'énoncé, un même identificateur écrit dans deux polices de caractères différentes désigne la même entité mais du point de vue mathématique pour la police en italique (par exemple n ) et du point de vue informatique pour celle en romain avec espacement fixe (par exemple n).
Des rappels des extraits du manuel de documentation de OCaml sont reproduits en annexe. Ces derniers portent sur le module Array.

Travail attendu

Pour répondre à une question, il est permis de réutiliser le résultat d'une question antérieure, même sans avoir réussi à établir ce résultat.
Il faudra coder des fonctions à l'aide du langage de programmation OCaml exclusivement, en reprenant l'en-tête de fonctions fourni par le sujet, sans s'obliger à recopier la déclaration des types. Il est permis d'utiliser la totalité du langage OCaml mais il est recommandé de s'en tenir aux fonctions les plus courantes afin de rester compréhensible. Quand l'énoncé demande de coder une fonction, sauf demande explicite, il n'est pas nécessaire de justifier que celle-ci est correcte ou de tester que des préconditions sont satisfaites.
Le barème tient compte de la clarté et de la concision des programmes : il est attendu que l'on choisisse des noms de variables intelligibles ou encore que l'on structure de longs codes par des blocs ou par des fonctions auxiliaires dont on décrit le rôle.

1. Relation d'ordre et tri topologique

Nous fixons un ensemble fini V et appelons n son cardinal. Nous notons systématiquement v_0, v_1, …, v_(n − 1) les éléments distincts de V.
Définition : Nous appelons relation d'ordre sur V toute relation binaire ⊴ qui est
  1. réflexive, c'est-à-dire telle que, pour tout indice i compris entre 0 et n − 1, nous avons la relation v_i⊴v_i,
  2. antisymétrique, c'est-à-dire telle que, pour tous indices i et j compris entre 0 et n − 1, si les relations v_i⊴v_j et v_j⊴v_i sont vérifiées, alors nous avons l'égalité v_i = v_j
  3. transitive, c'est-à-dire que, pour tous indices i, j et k compris entre 0 et n − 1, si les relations v_i⊴v_j et v_j⊴v_k sont vérifiées, alors nous avons encore la relation v_i⊴v_k.
    Un ensemble fini muni d'une relation d'ordre s'appelle un ensemble ordonné et se note ( V, ⊴ ). Nous réservons le symbole ⩽ pour désigner l'ordre usuel sur les entiers.
Indication OCaml: Nous représentons tout ordre sur un ensemble de cardinal n par une matrice carrée r de dimension n × n, de type
1.
type order = bool array array
où le coefficient r. (i). (j) vaut true si et seulement si la relation v_i⊴v_j est vérifiée.
◻1 - Écrire une fonction OCaml check_reflexivity (r:order) : bool qui vérifie si la relation r est une relation réflexive et qui relève du paradigme de programmation impérative.
◻2 - Écrire une fonction OCaml check_reflexivity_bis (r:order) : bool qui vérifie également si la relation r est une relation réflexive mais qui, par contraste avec la question 1 , relève du paradigme de programmation fonctionnelle.
Dans le reste du sujet, le choix du paradigme de programmation est libre.
◻3 - Écrire une fonction OCaml check_antisymmetry (r:order) : bool qui vérifie si la relation r est une relation antisymétrique.
◻4 - Écrire une fonction OCaml check_transitivity ( r :order) : bool qui vérifie si la relation r est une relation transitive.
◻5 - Écrire une fonction OCaml is_order ( r :order) : bool qui vérifie si la relation r est une relation d'ordre en s'appuyant sur les questions 1,3 et 4.
Définition : Nous appelons graphe d'un ensemble ordonné ( V, ⊴ ), ou simplement graphe de la relation d'ordre ⊴, le graphe orienté G = (V, E) dont l'ensemble des arcs est
E = {(v_i, v_j) où (i, j) ∈ [ [0, n − 1] ]^2 et v_i⊴v_j}.
Nous rappelons que le degré sortant d'un sommet v désigne le nombre d'arcs dont l'extrémité initiale vaut v.
◻6 - Écrire une fonction OCaml outdegrees (r:order) : int array dont la valeur de retour est le tableau d des degrés sortants des sommets du graphe de la relation d'ordre r. Autrement dit, pour tout indice i compris entre 0 et n − 1, l'entier d[i] est le degré sortant du sommet v_i.
◻7 - Écrire une fonction OCaml argmin (d:int array) : int dont la valeur de retour est un indice valide i tel que, pour tout indice j compris entre 0 et la longueur du tableau d'entiers d exclue, on a l'inégalité d[i] ⩽ d[j].
Définition : Étant donné un ensemble ordonné (V, ⊴) de cardinal n, nous appelons tri topologique de V toute permutation τ des entiers de l'intervalle [ [0, n − 1] ] telle que, pour tous indices i et j compris entre 0 et n − 1, si l'on a la relation v_i⊴v_j, alors on a l'inégalité τ(i) ⩽ τ(j). Pour tous indices i compris entre 0 et n − 1, nous disons dans ce cas que le sommet v_i est le sommet de numéro τ(i).
◻8 - Montrer qu'il existe une constante entière δ_0 telle que, pour tout tri topologique τ, le sommet de numéro n − 1, à savoir le sommet v_(τ^(− 1)(n − 1)), est de degré sortant δ_0 et le degré sortant des autres sommets est supérieur ou égal à δ_0.
◻9 - Écrire une fonction OCaml topological_sort (r:order) : int array dont la valeur de retour est un tri topologique de l'ensemble ordonné par r. Il est attendu que la fonction attribue les numéros par ordre décroissant et que, en cours d'exécution, elle s'appuie sur la question 8 pour identifier le prochain sommet à numéroter.
10 - Énoncer un ensemble d'invariants qui démontre que la fonction topological_sort de la question 9 est correcte. Il pourra s'agir d'invariants de boucle dans le cas d'un programme itératif ou de postconditions dans le cas d'un programme récursif.
11 - Exprimer la complexité en temps de la fonction topological_sort r en fonction du nombre d'éléments n ordonnés par la relation r. Dire comment on qualifie une telle complexité en fonction de l'espace en mémoire utilisé pour représenter l'argument d'entrée r.

2. Chaînes et antichaînes

Définition : Étant donné un ensemble ordonné ( V, ⊴ ), nous appelons chaîne toute partie C de V totalement ordonnée, c'est-à-dire, telle que pour tous éléments c et c^′ ∈ C, nous avons la relation c⊴c^′ ou la relation c^′⊴c.
Indication OCaml : Nous représentons une chaîne par le type int list.
Nous donnons le code suivant
let rec is_chain (r:order) (c:int list) : bool =
    match c with
    | [] -> true
    | v::cc -> List.for_all (fun x -> x > v || x < v) cc
        && is_chain r cc
où nous avons recouru à la fonction for_all du module List ainsi décrite dans la documentation de OCaml :
val for_all : ('a -> bool) -> 'a list -> bool
for_all f [a1; ...; an] checks if all elements of the list satisfy the predicate f.
That is, it returns (f a1) && (f a2) && ... && (f an) for a non-empty list and
true if the list is empty.
12 - Confirmer ou réfuter la spécification suivante : la fonction is_chain r c codée comme ci-dessus teste si la liste de sommets c est une chaîne au sens de la relation d'ordre r. Dans le premier cas, on fournira une démonstration; dans le second cas, on modifiera la fonction is_chain afin qu'elle soit correcte.
◻
13 - Déterminer la complexité en temps de la fonction is_chain r c codée comme ci-dessus en fonction de la longueur γ de la liste c. Justifier le calcul.
Nous nous proposons d'écrire une fonction is_chain_bis r c obéissant à la spécification de la question 12 et de complexité en temps O(γlogγ) où γ est la longueur de la liste c. À cette fin, nous nous préparons à introduire une structure de donnée mutable à capacité bornée permettant de stocker une collection d'éléments de ( V, ⊴ ) à travers l'interface suivante :
type hp
val init : order -> int -> hp
val is_empty : hp -> bool
val push : hp -> int -> bool
val pop : hp -> bool
L'appel init r gamma doit permet d'initialiser une collection vide, informée de la relation d'ordre r, et de capacité γ. L'appel is_empty q doit indiquer si la collection q est vide. L'appel push q i doit insérer l'élément v_i ∈ V à la collection q; l'appel pop q doit retirer un élément de la collection q. Nous envisageons que les appels à push et de pop puissent échouer, ce qui est signalé par la valeur de retour de ces fonctions. Nous écrivons la fonction is_chain_bis r c sous la forme suivante :
let is_chain_bis (r:order) (c:int list) : bool =
    let q = init r (List.length c) in
    let rec insert c : bool =
        match c with
        | [] -> true
        | hd::tl -> (push q hd) && insert tl
    in
    let rec extract_all () : bool =
        if is_empty q then true
        else (pop q) && (extract_all ())
    in
    (insert c) && (extract_all ())
Cette fonction insère les éléments de la liste c à une collection initialement vide q, de type hp, puis les retire de cette collection q.
◻14 - Compléter la description du type hp en nommant une structure de donnée, dont on rappellera brièvement l'invariant de bonne constitution, de sorte que la fonction is_chain_bis r c obéisse à la spécification de la question 12 et s'exécute en temps O(γlogγ), où γ est la longueur de la liste c. Justifier la réponse.
Définition : Étant donné un ensemble ordonné ( V, ⊴ ), nous appelons antichaîne toute collection de sommets A ⊆ V dont les éléments sont deux à deux incomparables, c'est-à-dire, telle que pour tous éléments distincts a et a^′ ∈ A, aucune des relations a⊴a^′ ou a^′⊴a n'est vérifiée.
Indication OCaml : Nous représentons une antichaîne par le type int list.
◻15 - Modifier la fonction is_chain introduite à la question 12 afin d'écrire une fonction OCaml is_antichain obéissant à la spécification : la fonction is_antichain r a teste si la liste de sommets a est une antichaîne pour la relation d'ordre r. En déduire que la fonction is_antichain admet pour complexité en temps la même complexité que celle obtenue à la question 13.
◻16 - Confirmer ou réfuter l'existence d'une fonction is_antichain_bis r a obéissant à la même spécification que celle de la question 15 et de complexité en temps O(αlog_2 α), où α est la longueur de la liste a.

3. Couverture par des chaînes

Définition : Nous disons qu'une famille finie (C_ℓ)_(1 ⩽ ℓ ⩽ λ) de chaînes de l'ensemble ordonné (V, ⊴) est une couverture si la réunion ⋃_(1 ⩽ ℓ ⩽ λ)C_ℓ est égale à l'ensemble V.
◻17 - Soit (C_ℓ)_(1 ⩽ ℓ ⩽ λ) une couverture de l'ensemble ordonné ( V, ⊴ ) et soit A une antichaîne de (V, ⊴) de cardinal α. Démontrer l'inégalité
α ⩽ λ.
Définition : Étant donné un ensemble ordonné ( V, ⊴ ), nous appelons graphe des poursuites d'un ensemble ordonné ( V, ⊴ ) le graphe biparti non orienté P = (W_0⊔W_1, F) où les ensembles de sommets W_0 et W_1 sont deux copies distinctes de V, dont on note les éléments
W_0 = {w_i; i ∈ [ [0, n − 1] ]} et W_1 = {w_(n + i); i ∈ [ [0, n − 1] ]},
et dont l'ensemble des arêtes est
F = {(w_i, w_(n + j)) où (i, j) ∈ [ [0, n − 1] ]^2, i ≠ j, et v_i⊴v_j}.
Indication OCaml : Nous représentons un graphe biparti à 2n sommets par un tableau de longueur 2n contenant des listes de voisins
type bipartite = int list array
Chaque arrête est notée deux fois en mémoire.
18 - Écrire une fonction OCaml bipartite_of_order (r:order) : bipartite dont la valeur de retour est le graphe des poursuites tiré de la relation d'ordre r.
Définition : Nous appelons couplage tout ensemble d'arêtes dont les extrémités sont distinctes.
◻19 - Pour tout couplage M du graphe des poursuites P = (W_0⊔W_1, F), nous construisons la partition (C_ℓ)_(1 ⩽ ℓ ⩽ λ) de l'ensemble V telle que
  1. pour tous indices i et j compris entre 0 et n − 1, si le couple (w_i, w_(n + j)) ∈ W_0 × W_1 est une arête de M, alors les deux éléments v_i et v_j appartiennent à une même part C_ℓ,
    2 . le cardinal λ est aussi grand que possible.
    Montrer que pour tout indice ℓ compris entre 1 et λ, l'ensemble C_ℓ est une chaîne de ( V, ⊴ ).
Indication OCaml : Nous représentons un couplage dans le graphe des poursuites P = ( W_0⊔W_1, F ) par un tableau m de longueur n, de type int array, tel que m[j] = i si le couple (w_i, w_(n + j)) ∈ W_0 × W_1 est une arête du couplage et m[j] = − 1 si le sommet w_(n + j) ∈ W_1 n'est pas l'extrémité d'une arrête du couplage.
◻20 - Déduire de la question 19 une fonction OCaml chains_of_matching (m:int array) : int list list dont la valeur de retour est une liste de chaînes disjointes tirée du couplage m.
◻21 - Une couverture (C_ℓ)_(1 ⩽ ℓ ⩽ λ) de l'ensemble ordonné ( V, ⊴ ) par des chaînes disjointes étant fixée, expliquer comment construire un couplage M tel que la construction de la question 19 conduit à la partition (C_ℓ)_(1 ⩽ ℓ ⩽ λ).
◻22 - Montrer que la construction de la question 19 fournit une couverture de l'ensemble V par un nombre minimum de chaînes si et seulement si elle s'applique à un couplage M de cardinal maximum.
◻23 - Écrire une fonction OCaml maximum_matching (p:bipartite) : int array qui calcule un couplage de cardinal maximum dans le graphe biparti p.
◻24 - Écrire une fonction OCaml minimum_cover (r:order) : int list list qui calcule une couverture par une famille de chaînes disjointes de cardinal minimum.
◻25 - Déterminer la complexité en temps de la fonction minimum_cover r en fonction du nombre d'éléments n ordonnés par la relation r.

A. Annexe : aide à la programmation en OCaml

Opérations sur les tableaux : Le module Array offre les fonctions suivantes :
  • length : 'a array -> int
Return the length (number of elements) of the given array.
  • make : int -> 'a -> 'a array
Array. make n x returns a fresh array of length n, initialized with x. All the elements of this new array are initially physically equal to x (in the sense of the = predicate). Consequently, if x is mutable, it is shared among all elements of the array, and modifying x through one of the array entries will modify all other entries at the same time.
  • make_matrix : int -> int -> 'a -> 'a array array
Array.make_matrix dimx dimy e returns a two-dimensional array (an array of arrays) with first dimension dimx and second dimension dimy. All the elements of this new matrix are initially physically equal to e. The element ( x, y ) of a matrix m is accessed with the notation m. (x). (y).
  • init : int -> (int -> 'a) -> 'a array
Array. init n f returns a fresh array of length n, with element number i initialized to the result of f(i). In other terms, init n f tabulates the results of f applied to the integers 0 to n − 1.
  • copy : 'a array -> 'a array
Array. copy a returns a copy of a, that is, a fresh array containing the same elements as a.
  • mem : 'a -> 'a array -> bool
    mem a l is true if and only if a is structurally equal to an element of l (i.e. there is an x in l such that compare a x = 0 ).
  • for_all : ('a -> bool) -> 'a array -> bool
Array.for_all f [|a1; ...; an |] checks if all elements of the array satisfy the predicate f. That is, it returns (f a1) && (f a2) && ... && (f an).
  • exists : ('a -> bool) -> 'a array -> bool
Array.exists f [|a1; ...; an |] checks if at least one element of the array satisfies the predicate f. That is, it returns ( f a1) || (f a2) || ... || (f an).
  • map : ('a -> 'b) -> 'a array -> 'b array
Array.map f a applies function f to all the elements of a, and builds an array with the results returned
by f : [|f a. (0) ; f a.(1) ; ...; f a.(length a - 1) |].
  • mapi : (int -> 'a -> 'b) -> 'a array -> 'b array
Same as Array.map, but the function is applied to the index of the element as first argument, and the element itself as second argument.
  • iter : ('a -> unit) -> 'a array -> unit
Array.iter f a applies function f in turn to all the elements of a. It is equivalent to fa.(0); f a.(1); ...; f a. (length a - 1); ().
  • iteri : (int -> 'a -> unit) -> 'a array -> unit
Same as Array.iter, but the function is applied to the index of the element as first argument, and the element itself as second argument.
D'après https://v2.ocaml.org/api/Array.html

Fin de l'Épreuve

Questions fréquentes

4 questions
Sur quels chapitres porte l'épreuve d'informatique option MP Mines 2024 ?
Afficher ou masquer la section

Sur quels chapitres porte l'épreuve d'informatique option MP Mines 2024 ?

L'épreuve porte sur les relations d'ordre : vérification de leurs propriétés, tri topologique, chaînes et antichaînes, puis couverture minimum par des chaînes disjointes via un graphe biparti.

Quelles erreurs le jury a-t-il le plus relevées sur ce sujet d'informatique option MP 2024 ?

Le jury signale des difficultés sur les vérifications élémentaires de relation d'ordre, une mauvaise compréhension du principe du tri topologique, une méconnaissance des tas à la question 14, et des copies mal présentées ou illisibles.

L'épreuve d'informatique option MP Mines-Télécom 2024 est-elle faisable en première année ?

Les sources ne permettent pas de répondre : le rapport ne précise pas de niveau de programme pour ce sujet.

Combien de questions comporte le sujet d'informatique option MP Mines 2024 ?

Le sujet comporte 25 questions réparties en trois parties, selon le rapport du jury.

Pas de description pour le moment