#include <bits/stdc++.h>
using namespace std;
int n, m, x[500000], y[500000], xx[500000], yy[500000], c[500000], ans, s, t,
    d1, d2, t1, t2, o1, o2, k1, k2;
bool b1[500000], b2[500000], b[500000];
int findset(int x) {
  if (x == c[x])
    return x;
  else {
    c[x] = findset(c[x]);
    return c[x];
  }
}
void unionset(int x, int y) { c[x] = y; }
int main() {
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    cin >> x[i] >> y[i];
  }
  for (int i = 1; i <= n; i++) c[i] = i;
  cin >> s >> t >> d1 >> d2;
  for (int i = 1; i <= m; i++) {
    t1 = findset(x[i]);
    t2 = findset(y[i]);
    if (t1 != t2) {
      if (x[i] == s || y[i] == t || x[i] == t || y[i] == s) continue;
      ans++;
      xx[ans] = x[i];
      yy[ans] = y[i];
      unionset(t1, t2);
    }
  }
  for (int i = 1; i <= m; i++) {
    t1 = findset(x[i]);
    t2 = findset(y[i]);
    if (x[i] == s) b1[t2] = true;
    if (x[i] == t) b2[t2] = true;
    if (y[i] == s) b1[t1] = true;
    if (y[i] == t) b2[t1] = true;
  }
  for (int i = 1; i <= m; i++) {
    t1 = findset(x[i]);
    t2 = findset(y[i]);
    if (t1 != t2) {
      if (x[i] != s && x[i] != t) {
        if (y[i] == s && b2[t1]) continue;
        if (y[i] == t && b1[t1]) continue;
        ans++;
        xx[ans] = x[i];
        yy[ans] = y[i];
        if (y[i] == s)
          k1++;
        else
          k2++;
        unionset(t1, t2);
      } else if (y[i] != s && y[i] != t) {
        if (x[i] == s && b2[t2]) continue;
        if (x[i] == t && b1[t2]) continue;
        ans++;
        xx[ans] = x[i];
        yy[ans] = y[i];
        if (x[i] == s)
          k1++;
        else
          k2++;
        unionset(t1, t2);
      }
    }
  }
  o1 = findset(s);
  o2 = findset(t);
  b[o1] = true;
  b[o2] = true;
  for (int i = 1; i <= m; i++) {
    t1 = findset(x[i]);
    t2 = findset(y[i]);
    if (t1 != t2) {
      if (y[i] != s && y[i] != t && !b[t2]) {
        if ((x[i] == s && k1 >= d1) || (x[i] == t && k2 >= d2)) continue;
        if (x[i] == s) k1++;
        if (x[i] == t) k2++;
        b[t1] = true;
        b[t2] = true;
        ans++;
        xx[ans] = x[i];
        yy[ans] = y[i];
        unionset(t1, t2);
      } else if (x[i] != s && x[i] != t && !b[t1]) {
        if ((y[i] == s && k1 >= d1) || (y[i] == t && k2 >= d2)) continue;
        if (y[i] == s) k1++;
        if (y[i] == t) k2++;
        b[t1] = true;
        b[t2] = true;
        ans++;
        xx[ans] = x[i];
        yy[ans] = y[i];
        unionset(t1, t2);
      }
    }
  }
  for (int i = 1; i <= m; i++) {
    t1 = findset(x[i]);
    t2 = findset(y[i]);
    if (t1 != t2 && k1 + (x[i] == s) + (y[i] == s) <= d1 &&
        k2 + (x[i] == t) + (y[i] == t) <= d2) {
      if (x[i] == s) k1++;
      if (x[i] == t) k2++;
      if (y[i] == s) k1++;
      if (y[i] == t) k2++;
      ans++;
      xx[ans] = x[i];
      yy[ans] = y[i];
      unionset(t1, t2);
    }
  }
  if (ans == n - 2) {
    for (int i = 1; i <= m; i++) {
      if ((x[i] == s && y[i] == t) || (x[i] == t && y[i] == s)) {
        unionset(findset(s), findset(t));
        ans++;
        xx[ans] = t;
        yy[ans] = s;
        k1++;
        k2++;
      }
    }
  }
  if (k1 > d1 || k2 > d2 || findset(s) != findset(t))
    cout << "No";
  else {
    cout << "Yes" << endl;
    ;
    for (int i = 1; i <= ans; i++) cout << xx[i] << " " << yy[i] << endl;
  }
}
