#include <stdio.h>
#include <stdlib.h>

#define MAX 100

int adj[MAX][MAX];
int visited[MAX];
int n;

void dfs(int v) {
    printf("%d ", v);
    visited[v] = 1;
    for (int i = 1; i <= n; i++) {
    if (adj[v][i] != 0 && !visited[i]) {
        dfs(i);
    }
    }
}
    }
}

int main() {
    int m;
    scanf("%d", &n);
    
    if (n < 1) {
        printf("Invalid Input\n");
        return 0;
    }
    
    scanf("%d", &m);
    if (m < 0) {
        printf("Invalid Input\n");
        return 0;
    }
    
    // initialize adjacency matrix
    for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
    adj[i][j] = 0;
    
    // read edges
    for (int i = 1; i <= m; i++) {
        int u, v, w;
        scanf("%d %d %d", &u, &v, &w);
        
        if (u < 1 || v < 1 || u > n || v > n) {
            printf("Invalid Input\n");
            return 0;
        }
        
        adj[u][v] = w;     // directed edge u→v with weight w
    }
    
    int start;
    scanf("%d", &start);
    
    if (start < 1 || start > n) {
        printf("Invalid Input\n");
        return 0;
    }
    
    // initialize visited array
    for (int i = 1; i <= n; i++)
    visited[i] = 0;
    
    dfs(start);
    printf("\n");
    
    return 0;
}