QOJ.ac

QOJ

حد الوقت: 1.0 s حد الذاكرة: 512 MB مجموع النقاط: 100

#24341. 바이러스

الإحصائيات

현대 정보과학의 가장 중요한 과제 중 하나는 생물학적 과정을 모델링하는 것입니다. 최근 생물학자들은 $n$개의 바이러스를 발견했고, 각각에 $1$부터 $n$까지의 고유한 번호를 붙였습니다. 바이러스는 다른 생물의 세포에 침투할 수 있습니다. 처음에 과학자들에게는 $1$부터 $n$까지 번호가 붙은 $n$개의 세포가 있으며, $i$번 세포는 $i$번 바이러스에 감염되어 있습니다. 각 세포는 하나의 바이러스에만 감염될 수 있습니다.

각 세포가 각 바이러스에 얼마나 잘 감염되는지에 대한 감수성 순위가 정해져 있습니다. 즉, 각 세포에 대해 가장 감수성이 높은 바이러스, 남은 바이러스 중 가장 감수성이 높은 바이러스, 그다음 바이러스 등이 알려져 있습니다.

바이러스에 감염된 세포들은 서로 공격합니다. 현재 $a$번 바이러스에 감염된 $i$번 세포가 $b$번 바이러스에 감염된 $j$번 세포를 공격한다고 합시다. 그러면 $j$번 세포가 $b$번 바이러스보다 $a$번 바이러스에 대한 감수성이 더 높을 경우, $j$번 세포는 $a$번 바이러스에 감염됩니다.

실험에서 과학자들은 $n$개의 세포를 모두 닫힌 환경에 넣습니다. 세포들은 임의의 방식으로 서로 공격할 수 있습니다. 이러한 공격으로 어떤 세포의 감염 바이러스도 바뀔 수 없게 되면 실험이 끝납니다.

과학자들은 실험이 끝나도록 하는 어떤 공격 순서를 따르더라도 $i$번 바이러스에 감염된 세포가 적어도 하나 남는 경우, $i$번 바이러스를 안정적이라고 부릅니다.

과학자들은 실험이 끝나도록 하는 공격 순서 중에서, 그 결과 $i$번 바이러스에 감염된 세포가 적어도 하나 남는 순서가 존재하는 경우, $i$번 바이러스를 생존 가능하다고 부릅니다.

예를 들어 바이러스가 두 개이고, $1$번 세포는 $1$번 바이러스에 대한 감수성이 가장 높으며, $2$번 세포는 $2$번 바이러스에 대한 감수성이 가장 높다고 합시다. 그러면 어떤 공격도 세포의 감염 바이러스를 바꾸지 않으므로 실험은 즉시 끝납니다. 따라서 두 바이러스 모두 안정적이며 생존 가능합니다.

이번에는 바이러스가 두 개이고, $1$번 세포는 $2$번 바이러스에 대한 감수성이 가장 높으며, $2$번 세포는 $1$번 바이러스에 대한 감수성이 가장 높다고 합시다. 그러면 한 세포가 다른 세포를 공격하기만 하면 실험이 끝납니다. 두 가지 시나리오가 가능합니다. 첫 번째에서는 $1$번 세포가 $2$번 세포를 공격하여 두 세포 모두 $1$번 바이러스에 감염됩니다. 두 번째에서는 $2$번 세포가 $1$번 세포를 공격하여 두 세포 모두 $2$번 바이러스에 감염됩니다. 따라서 안정적인 바이러스는 없지만 두 바이러스 모두 생존 가능합니다.

마지막으로 바이러스가 두 개이고 두 세포 모두 $1$번 바이러스에 대한 감수성이 더 높다고 합시다. 그러면 $2$번 세포가 $1$번 세포를 공격해도 감염 바이러스는 바뀌지 않습니다. 반면 $1$번 세포가 $2$번 세포를 공격하면 두 번째 세포가 $1$번 바이러스에 감염됩니다. 따라서 $2$번 세포가 $1$번 세포를 공격한 후 실험이 끝나며, $1$번 바이러스는 안정적이고 생존 가능하지만 $2$번 바이러스는 어느 성질도 갖지 않습니다.

과학자들은 어떤 바이러스가 안정적인지, 어떤 바이러스가 생존 가능한지라는 두 종류의 질문에 답해야 합니다.

세포에 대한 설명과 질문의 종류가 주어졌을 때, 안정적인 모든 바이러스 또는 생존 가능한 모든 바이러스를 구하는 프로그램을 작성하세요.

입력

첫 번째 줄에는 바이러스의 수이자 세포의 수인 정수 $n$이 주어집니다 ($1\le n\le 500$).

다음 $n$개의 줄에는 세포에 대한 설명이 주어집니다. 각 세포에 대해 $1$부터 $n$까지의 서로 다른 $n$개 수가 주어지며, 이들은 해당 세포의 감수성이 높은 순서대로 나열된 바이러스 번호입니다.

마지막 줄에는 과학자들이 관심 있는 바이러스의 성질을 나타내는 수 $p$가 주어집니다. $p=1$이면 안정적인 모든 바이러스를 구해야 하고, $p=2$이면 생존 가능한 모든 바이러스를 구해야 합니다.

출력

첫 번째 줄에는 관심 있는 성질을 가진 바이러스의 수인 정수 $k$를 출력하세요 ($0\le k\le n$).

두 번째 줄에는 그 성질을 가진 바이러스 번호 $k$개를 출력하세요. 번호는 오름차순으로 출력해야 합니다.

예제

입력 1

2
1 2
2 1
1

출력 1

2
1 2

입력 2

2
1 2
2 1
2

출력 2

2
1 2

입력 3

2
2 1
1 2
1

출력 3

0

입력 4

2
2 1
1 2
2

출력 4

2
1 2

입력 5

2
1 2
1 2
1

출력 5

1
1

입력 6

2
1 2
1 2
2

출력 6

1
1

입력 7

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

출력 7

1
3

입력 8

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

출력 8

3
1 3 4

서브태스크

서브태스크 배점 $n$ 제한 $p$ 제한 필요한 서브태스크 대회 중 제공되는 결과
$1$ $11$ $1\le n\le 5$ $p=1$ 테스트별 결과
$2$ $21$ $1\le n\le 500$ $p=1$ $1$ 첫 번째 오류
$3$ $22$ $1\le n\le 5$ 예제, $1$ 테스트별 결과
$4$ $31$ $1\le n\le 50$ 예제, $1$–$3$ 첫 번째 오류
$5$ $15$ $1\le n\le 500$ 예제, $1$–$4$ 첫 번째 오류

첫 번째 날 문제에 대한 공통 안내

데이터는 표준 입력에서 읽어야 합니다. 출력 데이터는 표준 출력에 출력해야 합니다.

모든 문제에서 서브태스크의 모든 테스트를 통과한 경우에만 해당 서브태스크의 점수가 주어집니다.

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.