#include <bits/stdc++.h>
using namespace std;
int sz[200005], pa[200005];
int r[200005], ss[200005];
vector<pair<int, int> > pr, k;
inline void init() {
  for (int i = 0; i < 200005; i++) {
    sz[i] = 1;
    pa[i] = i;
  }
}
int root(int i) {
  while (pa[i] != i) {
    pa[i] = pa[pa[i]];
    i = pa[i];
  }
  return i;
}
inline void uni(int i, int j) {
  int ra = root(i);
  int rb = root(j);
  if (sz[ra] < sz[rb]) {
    sz[rb] += sz[ra];
    pa[ra] = pa[rb];
    pr.push_back({i, j});
  } else {
    sz[ra] += sz[rb];
    pa[rb] = pa[ra];
    pr.push_back({i, j});
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  init();
  int n, m;
  cin >> n >> m;
  pair<int, int> p[m];
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    p[i] = {x, y};
  }
  int s, t, ds, dt;
  cin >> s >> t >> ds >> dt;
  vector<int> w[200005];
  for (int i = 0; i < m; i++) {
    if (p[i].first ^ s && p[i].first ^ t && p[i].second ^ s &&
        p[i].second ^ t) {
      if (root(p[i].first) != root(p[i].second)) uni(p[i].first, p[i].second);
    } else {
      w[p[i].first].push_back(p[i].second);
      w[p[i].second].push_back(p[i].first);
    }
  }
  for (int i = 0; i < w[s].size(); i++) {
    r[root(w[s][i])] = w[s][i];
  }
  for (int i = 0; i < w[t].size(); i++) {
    ss[root(w[t][i])] = w[t][i];
  }
  vector<int> tt;
  for (int i = 1; i <= n; i++) {
    if (i != s && i != t && root(i) == i) {
      tt.push_back(i);
    }
  }
  for (int i = 0; i < tt.size(); i++) {
    if (r[tt[i]] && ss[tt[i]])
      k.push_back({r[tt[i]], ss[tt[i]]});
    else if (r[tt[i]]) {
      pr.push_back({s, r[tt[i]]});
      ds--;
    } else if (ss[tt[i]]) {
      pr.push_back({t, ss[tt[i]]});
      dt--;
    }
  }
  if (ds == 0 || dt == 0) {
    cout << "No\n";
    return 0;
  }
  if (k.size()) {
    if (ds + dt < k.size() + 1) {
      cout << "No\n";
      return 0;
    }
    int i = 0;
    for (; i < k.size() && i < ds; i++) {
      pr.push_back({s, k[i].first});
    }
    i--;
    for (; i < k.size(); i++) {
      pr.push_back({t, k[i].second});
    }
  } else
    pr.push_back({s, t});
  cout << "Yes\n";
  for (int i = 0; i < pr.size(); i++)
    cout << pr[i].first << " " << pr[i].second << endl;
  return 0;
}
