#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll t;
queue<ll> nodeQueue;
void dijkstra(vector<vector<pair<bool, ll>>> &adjList, vector<pair<ll, ll>> &minDistance, vector<bool> &visited, ll curNode){
if(visited[curNode]) return;
//cout << curNode << ' ';
visited[curNode] = true;
for(auto i : adjList[curNode]){
ll neighbour = i.second;
if(visited[neighbour]) continue;
nodeQueue.push(neighbour);
if(i.first){
if(minDistance[neighbour].second==-1){
minDistance[neighbour].second = minDistance[curNode].first+1;
continue;
}
minDistance[neighbour].second = min(minDistance[neighbour].second, minDistance[neighbour].first+1);
}
else{
minDistance[neighbour].first = min(minDistance[neighbour].first, minDistance[curNode].first+1);
if(minDistance[curNode].second==-1) continue;
if(minDistance[neighbour].second==-1){
minDistance[neighbour].second = minDistance[curNode].second+1;
continue;
}
minDistance[neighbour].second = min(minDistance[neighbour].second, minDistance[curNode].second+1);
}
}
while(!nodeQueue.empty()){
ll neighbour = nodeQueue.front();
nodeQueue.pop();
dijkstra(adjList, minDistance, visited, neighbour);
}
return;
}
void solve(){
ll node, road, toll, start, end;
cin >> node >> road >> toll >> start >> end;
vector<vector<pair<bool, ll>>> adjList(node+1);
//adjList[i].first==true => toll
// false => road;
for(int i=1; i<=road; i++){
ll a, b; cin >> a >> b;
adjList[a].push_back({false, b});
adjList[b].push_back({false, a});
}
for(int i=1; i<=toll; i++){
ll a, b; cin >> a >> b;
adjList[a].push_back({true, b});
adjList[b].push_back({true, a});
}
vector<pair<ll, ll>> minDistance(node+1, {LLONG_MAX, -1});
//minDistance.first => minDistance without tolls
// .second=> minDistance with tolls
vector<bool> visited(node+1, false);
minDistance[start].first = 0;
dijkstra(adjList, minDistance, visited, start);
//for(auto i : minDistance) cout << i.first << ' ' << i.second << endl;
cout << min(minDistance[end].first, minDistance[end].second) << endl;
return;
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
//cin >> t;
t = 1;
while(t--) solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKbGwgdDsKCnF1ZXVlPGxsPiBub2RlUXVldWU7Cgp2b2lkIGRpamtzdHJhKHZlY3Rvcjx2ZWN0b3I8cGFpcjxib29sLCBsbD4+PiAmYWRqTGlzdCwgdmVjdG9yPHBhaXI8bGwsIGxsPj4gJm1pbkRpc3RhbmNlLCB2ZWN0b3I8Ym9vbD4gJnZpc2l0ZWQsIGxsIGN1ck5vZGUpewoJaWYodmlzaXRlZFtjdXJOb2RlXSkgcmV0dXJuOwoJCgkvL2NvdXQgPDwgY3VyTm9kZSA8PCAnICc7CgkKCXZpc2l0ZWRbY3VyTm9kZV0gPSB0cnVlOwoJZm9yKGF1dG8gaSA6IGFkakxpc3RbY3VyTm9kZV0pewoJCWxsIG5laWdoYm91ciA9IGkuc2Vjb25kOyAKCQlpZih2aXNpdGVkW25laWdoYm91cl0pIGNvbnRpbnVlOwoJCQoJCW5vZGVRdWV1ZS5wdXNoKG5laWdoYm91cik7CgkJCgkJaWYoaS5maXJzdCl7CgkJCWlmKG1pbkRpc3RhbmNlW25laWdoYm91cl0uc2Vjb25kPT0tMSl7CgkJCQltaW5EaXN0YW5jZVtuZWlnaGJvdXJdLnNlY29uZCA9IG1pbkRpc3RhbmNlW2N1ck5vZGVdLmZpcnN0KzE7CgkJCQljb250aW51ZTsKCQkJfQoJCQltaW5EaXN0YW5jZVtuZWlnaGJvdXJdLnNlY29uZCA9IG1pbihtaW5EaXN0YW5jZVtuZWlnaGJvdXJdLnNlY29uZCwgbWluRGlzdGFuY2VbbmVpZ2hib3VyXS5maXJzdCsxKTsKCQl9CgkJZWxzZXsKCQkJbWluRGlzdGFuY2VbbmVpZ2hib3VyXS5maXJzdCA9IG1pbihtaW5EaXN0YW5jZVtuZWlnaGJvdXJdLmZpcnN0LCBtaW5EaXN0YW5jZVtjdXJOb2RlXS5maXJzdCsxKTsKCQkJaWYobWluRGlzdGFuY2VbY3VyTm9kZV0uc2Vjb25kPT0tMSkgY29udGludWU7CgkJCWlmKG1pbkRpc3RhbmNlW25laWdoYm91cl0uc2Vjb25kPT0tMSl7CgkJCQltaW5EaXN0YW5jZVtuZWlnaGJvdXJdLnNlY29uZCA9IG1pbkRpc3RhbmNlW2N1ck5vZGVdLnNlY29uZCsxOwoJCQkJY29udGludWU7CgkJCX0KCQkJbWluRGlzdGFuY2VbbmVpZ2hib3VyXS5zZWNvbmQgPSBtaW4obWluRGlzdGFuY2VbbmVpZ2hib3VyXS5zZWNvbmQsIG1pbkRpc3RhbmNlW2N1ck5vZGVdLnNlY29uZCsxKTsKCQl9Cgl9CgkKCXdoaWxlKCFub2RlUXVldWUuZW1wdHkoKSl7CgkJbGwgbmVpZ2hib3VyID0gbm9kZVF1ZXVlLmZyb250KCk7CgkJbm9kZVF1ZXVlLnBvcCgpOwoJCWRpamtzdHJhKGFkakxpc3QsIG1pbkRpc3RhbmNlLCB2aXNpdGVkLCBuZWlnaGJvdXIpOwoJfQoJCglyZXR1cm47Cn0KCnZvaWQgc29sdmUoKXsKCWxsIG5vZGUsIHJvYWQsIHRvbGwsIHN0YXJ0LCBlbmQ7CgljaW4gPj4gbm9kZSA+PiByb2FkID4+IHRvbGwgPj4gc3RhcnQgPj4gZW5kOwoJCgl2ZWN0b3I8dmVjdG9yPHBhaXI8Ym9vbCwgbGw+Pj4gYWRqTGlzdChub2RlKzEpOwoJLy9hZGpMaXN0W2ldLmZpcnN0PT10cnVlCT0+IHRvbGwKCS8vCQkJCQlmYWxzZQk9PiByb2FkOwoJZm9yKGludCBpPTE7IGk8PXJvYWQ7IGkrKyl7CgkJbGwgYSwgYjsgY2luID4+IGEgPj4gYjsKCQlhZGpMaXN0W2FdLnB1c2hfYmFjayh7ZmFsc2UsIGJ9KTsKCQlhZGpMaXN0W2JdLnB1c2hfYmFjayh7ZmFsc2UsIGF9KTsKCX0KCWZvcihpbnQgaT0xOyBpPD10b2xsOyBpKyspewoJCWxsIGEsIGI7IGNpbiA+PiBhID4+IGI7CgkJYWRqTGlzdFthXS5wdXNoX2JhY2soe3RydWUsIGJ9KTsKCQlhZGpMaXN0W2JdLnB1c2hfYmFjayh7dHJ1ZSwgYX0pOwoJfQoJCgl2ZWN0b3I8cGFpcjxsbCwgbGw+PiBtaW5EaXN0YW5jZShub2RlKzEsIHtMTE9OR19NQVgsIC0xfSk7CgkvL21pbkRpc3RhbmNlLmZpcnN0ID0+IG1pbkRpc3RhbmNlIHdpdGhvdXQgdG9sbHMKCS8vCQkJIC5zZWNvbmQ9PiBtaW5EaXN0YW5jZSB3aXRoIHRvbGxzCgl2ZWN0b3I8Ym9vbD4gdmlzaXRlZChub2RlKzEsIGZhbHNlKTsKCW1pbkRpc3RhbmNlW3N0YXJ0XS5maXJzdCA9IDA7CglkaWprc3RyYShhZGpMaXN0LCBtaW5EaXN0YW5jZSwgdmlzaXRlZCwgc3RhcnQpOwoJCgkvL2ZvcihhdXRvIGkgOiBtaW5EaXN0YW5jZSkgY291dCA8PCBpLmZpcnN0IDw8ICcgJyA8PCBpLnNlY29uZCA8PCBlbmRsOwoJCgljb3V0IDw8IG1pbihtaW5EaXN0YW5jZVtlbmRdLmZpcnN0LCBtaW5EaXN0YW5jZVtlbmRdLnNlY29uZCkgPDwgZW5kbDsKCQoJcmV0dXJuOwp9CgppbnQgbWFpbigpIHsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoJLy9jaW4gPj4gdDsKCXQgPSAxOwoJd2hpbGUodC0tKSBzb2x2ZSgpOwp9