#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

FILE *fIn, *fOut, *fAns;
int max_score;

int n, edges;
vector<queue<int> > all;

int main(int argc, char** argv)
{
	freopen("report", "wt", stdout);
	sscanf(argv[1], "%d", &max_score);
	fIn = fopen(argv[2], "r");
	fOut = fopen(argv[3], "r");
	fAns = fopen(argv[4], "r");

    fscanf(fIn, "%d\n", &n);
    edges = 0;
    for (int v = 1; v <= n; v++)
    {
        queue<int> adj;
        int num = 0;
        while (true)
        {
            char c;
            fscanf(fIn, "%c", &c);
            if (c >= '0' && c <= '9')
                num = num * 10 + (c - '0');
            else
            {
                edges++;
                adj.push(num);
                num = 0;
            }
            if (c == '\n')
                break;
        }
        all.push_back(adj);
    }
    edges /= 2;

    for (int i = 0; i < edges; i++)
    {
        int v1, v2;
        if (fscanf(fOut, "%d%d", &v1, &v2) != 2)
        {
            printf(" 0 - Не вдалося зчитати потрібну кількість ребер.\n");
            return 0;
        }

        if (v1 < 1 || v2 < 1 || v1 > n || v2 > n || v1 == v2)
        {
            printf(" 0 - Неправильний опис ребра.\n");
            return 0;
        }

        if (v1 > v2)
        {
            printf(" 0 - Першою в описі ребра вказано вершину з більшим номером.\n");
            return 0;
        }

        if (all[v1 - 1].empty() || all[v1 - 1].front() != v2 || all[v2 - 1].empty() || all[v2 - 1].front() != v1)
        {
            printf(" 0 - Неправильна відповідь.\n");
            return 0;
        }

        all[v1 - 1].pop();
        all[v2 - 1].pop();
    }

    int v;
    if (fscanf(fOut, "%d", &v) == 1)
    {
        printf(" 0 - Зайві числа у файлі.\n");
        return 0;
    }

    printf("%02d - Правильна відповідь.\n", max_score);
	return 0;
}

