QOJ.ac

QOJ

时间限制: 1.0 s 内存限制: 512 MB 总分: 100

#24341. Virus

统计

Uno dei compiti più importanti dell'informatica moderna è la modellazione dei processi biologici. Recentemente i biologi hanno scoperto $n$ virus, a ciascuno dei quali è stato assegnato un codice numerico univoco da $1$ a $n$. Un virus può inserirsi nelle cellule di altri organismi. Inizialmente gli scienziati dispongono di $n$ cellule, numerate da $1$ a $n$, e la cellula numero $i$ è infettata dal virus $i$. Ogni cellula può essere infettata da un solo virus.

Per ogni cellula è stato determinato il suo grado di suscettibilità a ciascun virus. Precisamente, per ogni cellula si conosce il virus a cui è più suscettibile, poi quello a cui è più suscettibile tra i virus rimanenti, e così via.

Le cellule infettate dai virus si attaccano a vicenda. Supponiamo che la cellula numero $i$ sia attualmente infettata dal virus numero $a$ e attacchi la cellula numero $j$, che è infettata dal virus numero $b$. Se la cellula numero $j$ è più suscettibile al virus $a$ che al virus $b$, allora la cellula numero $j$ viene infettata dal virus $a$.

Nell'esperimento, gli scienziati mettono tutte le $n$ cellule in un ambiente chiuso, dove esse possono attaccarsi a vicenda in qualsiasi modo. L'esperimento termina quando questi attacchi non possono più cambiare il virus che infetta alcuna cellula.

Gli scienziati chiamano il virus numero $i$ stabile se, per qualsiasi sequenza di attacchi tra cellule che porti alla conclusione dell'esperimento, rimane almeno una cellula infettata dal virus numero $i$.

Gli scienziati chiamano il virus numero $i$ vitale se esiste una sequenza di attacchi tra cellule che porti alla conclusione dell'esperimento, dopo la quale rimane almeno una cellula infettata dal virus numero $i$.

Per esempio, supponiamo che ci siano due virus e che la cellula numero $1$ sia più suscettibile al virus numero $1$, mentre la cellula numero $2$ sia più suscettibile al virus numero $2$. L'esperimento termina immediatamente: nessun attacco cambia il virus che infetta una cellula. Quindi entrambi i virus sono stabili e vitali.

Supponiamo ora che ci siano due virus, ma che la cellula numero $1$ sia più suscettibile al virus numero $2$ e la cellula numero $2$ al virus numero $1$. L'esperimento termina dopo qualsiasi attacco di una cellula all'altra. Sono possibili due scenari. Nel primo, la cellula $1$ attacca la cellula $2$ ed entrambe vengono infettate dal virus $1$. Nel secondo, la cellula $2$ attacca la cellula $1$ ed entrambe vengono infettate dal virus $2$. Quindi non ci sono virus stabili, ma entrambi i virus sono vitali.

Infine, supponiamo che ci siano due virus e che entrambe le cellule siano più suscettibili al virus numero $1$. L'attacco della cellula $2$ alla cellula $1$ non cambia il virus che la infetta, mentre, se la cellula $1$ attacca la cellula $2$, la seconda cellula viene infettata dal virus $1$. Di conseguenza, l'esperimento termina dopo l'attacco alla cellula $1$ da parte della cellula $2$; il virus $1$ è stabile e vitale, mentre il virus $2$ non possiede nessuna delle due proprietà.

Gli scienziati devono rispondere a due tipi di domande: quali virus sono stabili e quali virus sono vitali.

Scrivi un programma che, date le descrizioni delle cellule e il tipo di domanda, determini tutti i virus stabili oppure tutti i virus vitali.

Input

La prima riga contiene un intero $n$, il numero di virus e quindi di cellule, con $1\le n\le500$.

Le successive $n$ righe contengono le descrizioni delle cellule. Per ogni cellula sono indicati $n$ numeri distinti da $1$ a $n$: i numeri dei virus in ordine decrescente di suscettibilità della cellula a essi.

L'ultima riga contiene il numero $p$, che indica la proprietà dei virus di interesse per gli scienziati. Il valore $p=1$ significa che vogliono determinare tutti i virus stabili, mentre $p=2$ significa che vogliono determinare tutti i virus vitali.

Output

La prima riga deve contenere un intero $k$, il numero di virus che possiedono la proprietà di interesse, con $0\le k\le n$.

La seconda riga deve contenere $k$ interi, i numeri dei virus che possiedono tale proprietà. I numeri dei virus devono essere stampati in ordine crescente.

Esempi

Input 1

2
1 2
2 1
1

Output 1

2
1 2

Input 2

2
1 2
2 1
2

Output 2

2
1 2

Input 3

2
2 1
1 2
1

Output 3

0

Input 4

2
2 1
1 2
2

Output 4

2
1 2

Input 5

2
1 2
1 2
1

Output 5

1
1

Input 6

2
1 2
1 2
2

Output 6

1
1

Input 7

4
3 2 4 1
1 4 2 3
3 1 2 4
1 4 2 3
1

Output 7

1
3

Input 8

4
3 2 4 1
1 4 2 3
3 1 2 4
1 4 2 3
2

Output 8

3
1 3 4

Sottocompiti

Sottocompito Punti Vincoli su $n$ Vincoli su $p$ Sottocompiti richiesti Risultati durante la gara
$1$ $11$ $1\le n\le5$ $p=1$ Risultati per ciascun test
$2$ $21$ $1\le n\le500$ $p=1$ $1$ Primo errore
$3$ $22$ $1\le n\le5$ Esempi, $1$ Risultati per ciascun test
$4$ $31$ $1\le n\le50$ Esempi, $1$–$3$ Primo errore
$5$ $15$ $1\le n\le500$ Esempi, $1$–$4$ Primo errore

Informazioni generali sui problemi del primo turno

I dati devono essere letti dallo standard input. I dati di output devono essere scritti sullo standard output.

In tutti i problemi, i punti di un sottocompito vengono assegnati solo se tutti i test del sottocompito sono superati.

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.