#include <bits/stdc++.h>
using namespace std;
const long long BIG = 1000000000000000000LL;
void solve();
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  solve();
  return 0;
}
const long long borne = 200 * 1000 + 5;
vector<long long> adj[borne];
long long s1, s2, d1, d2;
long long nbNod, nbEdg;
long long comp[borne];
long long nbComp = 0;
vector<long long> v1, v2;
long long mang1[borne], mang2[borne];
bool osef[borne];
vector<pair<long long, long long> > yolo;
void dfsIni(long long nod, long long cc) {
  comp[nod] = cc;
  for (long long vo : adj[nod])
    if (comp[vo] == 0) {
      if (vo == s1) {
        if (!mang1[cc]) {
          v1.push_back(cc);
          mang1[cc] = nod + 1;
        }
        continue;
      }
      if (vo == s2) {
        if (!mang2[cc]) {
          v2.push_back(cc);
          mang2[cc] = nod + 1;
        }
        continue;
      }
      dfsIni(vo, cc);
      yolo.push_back({nod, vo});
    }
}
long long chef[borne];
void solve() {
  cin >> nbNod >> nbEdg;
  for (long long i = (0); i < (nbEdg); ++i) {
    long long u, v;
    cin >> u >> v;
    --u;
    --v;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  cin >> s1 >> s2 >> d1 >> d2;
  --s1;
  --s2;
  for (long long nod = (0); nod < (nbNod); ++nod)
    if (nod != s1 && nod != s2 && comp[nod] == 0) {
      dfsIni(nod, ++nbComp);
      chef[nbComp] = nod;
    }
  for (long long a = 1; a <= nbComp; ++a) {
    if (!mang2[a]) {
      osef[a] = true;
      --d1;
      yolo.push_back({mang1[a] - 1, s1});
    } else if (!mang1[a]) {
      osef[a] = true;
      --d2;
      yolo.push_back({mang2[a] - 1, s2});
    }
  }
  bool tt = false;
  for (long long a = 1; a <= nbComp; ++a) {
    if (osef[a]) continue;
    if (!tt) {
      yolo.push_back({mang1[a] - 1, s1});
      yolo.push_back({mang2[a] - 1, s2});
      --d1;
      --d2;
      tt = true;
      continue;
    }
    if (d1 > d2) {
      yolo.push_back({mang1[a] - 1, s1});
      --d1;
    } else {
      yolo.push_back({mang2[a] - 1, s2});
      --d2;
    }
  }
  if (!tt) {
    yolo.push_back({s1, s2});
    --d1;
    --d2;
  }
  if (d1 < 0 || d2 < 0) {
    cout << "No\n";
  } else {
    cout << "Yes\n";
    for (auto u : yolo) {
      cout << u.first + 1 << " " << u.second + 1 << "\n";
    }
  }
}
