/*
* Snack
* Checker
*/

#include "testlib.h"
#include <bits/stdc++.h>
using namespace std;

/*
* input을 읽고 저장함
* getinput(): inf에서 입력을 읽음
* check(P): P 순서로 학생들을 들여보냈을 때 목표를 달성할 수 있는지 확인함
*/
namespace input {
	// Input에서 받는 변수
	int N;
	vector<int> C;
	vector<vector<int>> A;

	// inf에서 입력 받는 함수
	void getinput() {
		N = inf.readInt(1, 200'000);
		C.resize(N + 1);
		A.resize(N + 1);
		for (int i = 1; i <= N; i++) {
			C[i] = inf.readInt();
			A[i].resize(C[i] + 1);
			for (int j = 1; j <= C[i]; j++) {
				A[i][j] = inf.readInt();
			}
		}
	}

	/*
	* P는 {1, 2, ..., N}의 permutation이어야 하며, 그렇지 않을 경우 false를 반환
	* P 순서로 학생들을 들여보냈을 때 목표를 달성할 수 있다면 true를 반환
	* P의 index는 0부터 시작함 (P[0], ..., P[N-1])
	*/
	bool check(const vector<int>& P) {
		// 1. P가 {1, 2, ..., N}의 permutation인지 검사

		// 1-1. P의 크기가 N이어야 함
		if (P.size() != N) return false;

		// 1-2. P를 정렬한 배열을 Q라 할 때, Q가 { 1, 2, ..., N }이어야 함
		vector<int> Q = P;
		sort(Q.begin(), Q.end());
		for (int i = 0; i < N; i++) if (Q[i] != i + 1) return false;

		// 2. P 순서로 학생들이 간식을 가져가는 경우를 시뮬레이션함

		// i번 간식을 누군가 가져갔으면 1, 아니면 0
		vector<int> vis(N + 1);

		for (auto i : P) {
			// i번 학생이 간식을 가져감

			int snack_count = 0;

			for (int j = 1; j <= C[i]; j++) {
				int snack = A[i][j];
				if (vis[snack] == 0) {
					vis[snack] = 1;
					snack_count++;
				}
			}

			// 가져간 개수가 1이 아니면 false 반환
			if (snack_count != 1) return false;
		}

		// 3. 모든 학생이 하나씩 가져갔으면 true 반환
		return true;
	}
}

/*
* in에서 output을 읽고 반환
* 첫 정수가 -1일 경우 그 정수만 읽은 후 { -1 } 반환
* 그렇지 않을 경우 총 N개의 정수를 읽고 vector로 반환
*/
vector<int> read_output(InStream& in, int N) {
	int first = in.readInt(-1, N);
	if (first == -1) return { -1 };

	// N-1개의 정수를 추가로 읽어야 함

	vector<int> ret;
	if (N > 1) {
		ret = in.readInts(N - 1, 1, N);
		ret.insert(ret.begin(), first);
	}
	else {
		// N == 1
		ret.push_back(first);
	}
	return ret;
}

int main(int argc, char* argv[]) {
	registerTestlibCmd(argc, argv);

	input::getinput();

	vector<int> juryAns = read_output(ans, input::N);
	vector<int> participantAns = read_output(ouf, input::N);

	// "해당 output이 불가능하다고 판정함" iff (크기가 1 && 첫 값이 -1)
	// 두 output이 "가능하다"고 판정했는지 저장하는 변수
	bool juryPossible = !(juryAns.size() == 1 && juryAns[0] == -1);
	bool participantPossible = !(participantAns.size() == 1 && participantAns[0] == -1);

	// 두 output 중 가능하다고 출력한 output에 대해 그 output이 valid한지 검사
	if (juryPossible) {
		if (!input::check(juryAns)) quitf(_fail, "Answer is not valid");
	}

	if (participantPossible) {
		if (!input::check(participantAns)) quitf(_wa, "Wrong Answer");
	}

	// ouf와 ans가 가능 여부를 다르게 판정한 경우
	if (juryPossible != participantPossible) {
		if (juryPossible) {
			// participantPossible = false, juryPossible = true
			quitf(_wa, "Wrong Answer");
		}
		else {
			// participantPossible = true, juryPossible = false
			quitf(_fail, "The participant's output is better than the jury answer");
		}
	}

	quitf(_ok, "Correct");
}