// editor2
#include <stdio.h>
#include <stdlib.h>

int cmpfunc(const void *a, const void *b) {
    return ((int)a - (int)b);
}

int main() {
    int n, m;
    if (scanf("%d %d", &n, &m) != 2) {
        printf("Invalid input\n");
        return 0;
    }

    if (n < 1 || n > 100 || m < 0 || m > n * (n - 1)) {
        printf("Invalid input\n");
        return 0;
    }

    int adj[101][101] = {0};   // adjacency matrix to avoid duplicates
    int out[101];              // store outgoing nodes
    int count = 0;

    for (int i = 0; i < m; i++) {
        int u, v;
        if (scanf("%d %d", &u, &v) != 2) {
            printf("Invalid input\n");
            return 0;
        }
        if (u < 1 || u > n || v < 1 || v > n || u == v) {
            printf("Invalid input\n");
            return 0;
        }
        if (!adj[u][v]) {      // avoid duplicate edges
            adj[u][v] = 1;
        }
    }

    int x;
    if (scanf("%d", &x) != 1 || x < 1 || x > n) {
        printf("Invalid input\n");
        return 0;
    }

    // collect outgoing nodes
    for (int v = 1; v <= n; v++) {
        if (adj[x][v]) {
            out[count++] = v;
        }
    }

    if (count == 0) {
        printf("No outgoing signals\n");
    } else {
        qsort(out, count, sizeof(int), cmpfunc); // sort
        for (int i = 0; i < count; i++) {
            printf("%d", out[i]);
            if (i < count - 1) printf(" ");
        }
        printf("\n");
    }

return 0;
}