#ifdef THEMIS
#include "testlib_themis.h"
const std::string TASK_NAME = "BFS";
#define _100 1.0
#else
#include "testlib.h"
#define _100 100.0
#endif // THEMIS

#include<bits/stdc++.h>
using namespace std;
#define nmax 1001
#define mmax 500001
bool A[nmax][nmax];
int m, n, s, t;

void readInput() {
    n = inf.readInt();
    m = inf.readInt();
    s = inf.readInt();
    t = inf.readInt();
    memset(A, 0, sizeof A);
    for (int i = 1; i <= m; i++) {
        int u = inf.readInt();
        int v = inf.readInt();
        A[u][v] = A[v][u] = 1;
    }
}

void readOutput() {
    int l_ans = ans.readInt();
    int l_out = ouf.readInt();
    if (l_out == -1) {
        if (l_ans != -1)
            quitf(_wa, "Có đường đi!");
        quitf(_ok, "Ơ mây zing, gút chóp em. Không tồn tại đường đi!");
    }
    readInput();
    vector<int> p(l_out + 1);
    for (int i = 0; i <= l_out; i++) {
        p[i] = ouf.readInt();
        if (p[i] < 1 || p[i] > n)
            quitf(_wa, "Đỉnh %d trên đường đi không hợp lệ.", p[i]);
        if (i > 0) {
            int u = p[i - 1], v = p[i];
            if (!A[u][v])
                quitf(_wa, "Không có cạnh nối giữa đỉnh %d và đỉnh %d.", u, v);
        }
    }
    if (p[0] != s)
        quitf(_wa, "Đường đi không xuất phát từ %d.", s);
    if (p.back() != t)
        quitf(_wa, "Đường đi không kết thúc tại %d.", t);

    if (l_ans == -1 || l_out < l_ans)
        quitf(_ok, "Ơ mây zing, gút chóp em. Em giỏi hơn tác giả rồi.");

    if (l_out > l_ans) {
        double p = 0.5 * _100;
        quitp(p, "Độ dài đường đi chưa tối ưu (Bạn: %d, Đáp án: %d).", l_out, l_ans);
    }

    quitf(_ok, "Ơ mây zing, gút chóp em. Đường đi tối ưu.");
}

int main(int argc, char *argv[]) {
#ifdef THEMIS
    registerTestlibThemis(TASK_NAME + ".inp", TASK_NAME + ".out");
#else
    registerTestlibCmd(argc, argv);
#endif
    readOutput();
    return 0;
}
