#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 7;
vector<pair<int, int> > ans;
vector<int> E[maxn];
int s, t, ds, dt, fa[maxn], vis[maxn], n, m, link1[maxn], link2[maxn];
vector<int> c;
int fi(int x) { return fa[x] == x ? x : fa[x] = fi(fa[x]); }
void uni(int x, int y) {
  x = fi(x), y = fi(y);
  fa[x] = y;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    E[x].push_back(y);
    E[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) fa[i] = i;
  scanf("%d%d%d%d", &s, &t, &ds, &dt);
  for (int i = 1; i <= n; i++) {
    if (i == s || i == t) continue;
    for (int j = 0; j < E[i].size(); j++) {
      int v = E[i][j];
      if (v == s || v == t) continue;
      if (fi(i) != fi(v)) {
        ans.push_back(make_pair(i, v));
        uni(i, v);
      }
    }
  }
  int flag = 0;
  for (int i = 0; i < E[s].size(); i++) {
    int v = E[s][i];
    link1[fi(E[s][i])] = 1;
  }
  for (int i = 0; i < E[t].size(); i++) {
    int v = E[t][i];
    link2[fi(E[t][i])] = 1;
  }
  if (!flag) {
    for (int i = 0; i < E[t].size(); i++) {
      int v = E[t][i];
      if (link1[fi(v)]) {
        vis[fi(v)] = 1;
        dt--;
        ans.push_back(make_pair(t, v));
        uni(t, v);
        break;
      }
    }
    for (int i = 0; i < E[s].size(); i++) {
      int v = E[s][i];
      if (vis[v]) {
        ds--;
        ans.push_back(make_pair(s, v));
        uni(s, v);
        break;
      }
    }
  }
  for (int i = 0; i < E[s].size(); i++) {
    if (!link2[E[s][i]] && ds && fi(s) != fi(E[s][i])) {
      ans.push_back(make_pair(s, E[s][i]));
      uni(s, E[s][i]);
      ds--;
    }
  }
  for (int i = 0; i < E[t].size(); i++) {
    if (!link1[E[t][i]] && dt && fi(t) != fi(E[t][i])) {
      ans.push_back(make_pair(t, E[t][i]));
      uni(t, E[t][i]);
      dt--;
    }
  }
  for (int i = 0; i < E[s].size(); i++) {
    if (ds && fi(s) != fi(E[s][i])) {
      ans.push_back(make_pair(s, E[s][i]));
      uni(s, E[s][i]);
      ds--;
    }
  }
  for (int i = 0; i < E[t].size(); i++) {
    if (dt && fi(t) != fi(E[t][i])) {
      ans.push_back(make_pair(t, E[t][i]));
      uni(t, E[t][i]);
      dt--;
    }
  }
  if (fi(s) != fi(t)) {
    for (int i = 0; i < E[s].size(); i++) {
      if (E[s][i] == t) {
        uni(s, t);
        ans.push_back(make_pair(s, t));
      }
    }
  }
  if (ans.size() == n - 1) {
    cout << "Yes" << endl;
    for (int i = 0; i < ans.size(); i++)
      cout << ans[i].first << " " << ans[i].second << endl;
  } else
    cout << "No" << endl;
}
