QOJ.ac

QOJ

Time Limit: 2.0 s Memory Limit: 256 MB Total points: 100

#18901. Paquet

Statistics

Pour installer des paquets dans le système d'exploitation Vinux, Vasya utilise Vum, le gestionnaire de paquets moderne.

Chaque paquet possède plusieurs versions pouvant être installées. Une seule version d'une application peut être installée à la fois. Appelons paquet une version précise d'une application précise. Comme certaines versions de différentes applications peuvent être incompatibles entre elles, il existe des conflits dans Vum. Chaque conflit est un ensemble de paquets dont au plus un peut être installé. Essayer d'installer plusieurs paquets d'une même liste de conflit provoque un plantage, et Vasya ne le souhaite pas.

Les différentes versions d'une application peuvent être en conflit ou non. Un conflit peut contenir plusieurs versions d'une application, y compris toutes ses versions.

Le système de description des conflits de Vum étant assez primitif, chaque paquet ne peut figurer que dans un seul conflit.

Vasya veut installer $N$ applications différentes sans faire planter son Vinux. Il doit choisir leurs versions sans enfreindre les règles ci-dessus, mais les algorithmes exhaustifs de résolution des dépendances de Vum ne peuvent pas accomplir cette tâche. Vasya demande de l'aide pour son gestionnaire de paquets.

Entrée

La première ligne du fichier d'entrée contient un entier $N$ — le nombre d'applications que Vasya veut installer ($1 \le N \le 200$).

Les $N$ lignes suivantes décrivent les applications, avec leurs listes de versions. La description d'une application comprend les champs suivants, séparés par des espaces :

  • nom de l'application — une chaîne de lettres latines minuscules, longue de 1 à 10 caractères ;
  • nombre de versions — un entier strictement positif inférieur ou égal à $1\,000$ ;
  • numéros des versions — des entiers strictement positifs donnés par ordre croissant.

Les numéros des applications sont inférieurs ou égaux à $100\,000$. Tous les noms d'applications sont différents.

La ligne suivante contient le nombre $K$ — le nombre de conflits ($0 \le K \le 500$).

Les $K$ lignes suivantes décrivent les conflits. La description d'un conflit commence par un entier strictement positif $T$ — le nombre de paquets dans ce conflit. Ensuite sont indiqués $T$ paquets séparés par des espaces. Pour chaque paquet, le nom de l'application est donné, suivi du numéro de version.

Il est garanti que les paquets listés dans les conflits ne se répètent jamais et que toutes les versions sont mentionnées dans les descriptions des applications.

Sortie

S'il est impossible d'installer les $N$ applications sans conflit, l'unique ligne du fichier de sortie doit contenir le mot No. Si cela est possible, la première ligne doit contenir le mot Yes, et la deuxième doit lister les numéros des versions à installer pour y parvenir, séparés par des espaces.

Les versions des $N$ applications doivent être affichées dans l'ordre où les applications sont décrites dans le fichier d'entrée. S'il existe plusieurs façons possibles de choisir les applications, affichez n'importe laquelle.

Exemples

Entrée 1

3
vim 3 1 2 3
nano 2 5 8
python 2 2 3
2
2 vim 3 nano 8
3 vim 1 nano 5 vim 2

Sortie 1

Yes
2 8 2

Entrée 2

2
firefox 1 38
chrome 1 46
1
2 firefox 38 chrome 46

Sortie 2

No

Remarque

Le premier exemple contient deux conflits. Le premier empêche l'installation simultanée de la troisième version de vim et de la huitième version de nano. Le second indique qu'un seul des paquets suivants peut être installé — la première version de vim, la cinquième de nano et la deuxième de vim — ou aucun. Les solutions correctes sont les suivantes :

  • 1 8 2
  • 1 8 3
  • 2 8 2
  • 2 8 3
  • 3 5 2
  • 3 5 3

Dans le deuxième exemple, il y a deux applications, chacune avec une seule version. Cependant, l'unique conflit interdit d'installer les deux applications ensemble.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.