#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef vector<string> vs;
typedef set<int> vi;
typedef map<string, vs> graphS;
typedef map<int , vi> graphI;
struct forbiden_trip
{
    int a;
    int b;
    int c;
};
graphI g;
map<int, int> parents;
void add(int src, int dist)
{
    g[src].insert(dist);
    g[dist].insert(src);
}
int main()
{


    queue<int> q;
    set<int> vis;
    int n, e,k;
    cin>>n>>e>>k;
    for (int i = 0; i < e;i ++)
    {
        int src, dist;
        cin>>src>>dist;

        add(src, dist);
    }
    q.push(1);

    vis.insert(1);
    parents[1] = -1;
    set<string> F;
    for (int i = 0; i < k; i ++)
    {
        int a, b ,c;
        cin>>a>>b>>c;
        F.insert(to_string(a) + to_string(b) + to_string(c));

    }
    while(q.empty() == false)
    {
        auto i = g[q.front()];
        if (q.front() == n)
        {
            break;
        }
        for (int s : i)
        {
            if (vis.count(s))continue;
            parents[s] = q.front();
            vis.insert(s);
            q.push(s);
        }
       // cout<<q.front()<<endl;
        q.pop();
    }
    int start = n;
    while(true)
    {
        cout<<start<<" ";
        start = parents[start];
        if (start == -1)
            break;
        
    }
}
