#include <bits/stdc++.h>
const int N = 200005;
struct X {
  int u, v;
  bool bj;
} x[N << 1];
int fa[N], ans[N], sl, ts, jl[4], sf[N][2];
int fi(int a) {
  int b = a, c;
  while (fa[b]) b = fa[b];
  while (fa[a]) {
    c = fa[a];
    fa[a] = b;
    a = c;
  }
  return a;
}
int main() {
  int n, m, s[2], d[2];
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; ++i) scanf("%d%d", &x[i].u, &x[i].v);
  scanf("%d%d%d%d", &s[0], &s[1], &d[0], &d[1]);
  for (int i = 1; i <= m; ++i)
    if (x[i].u != s[0] && x[i].u != s[1] && x[i].v != s[0] && x[i].v != s[1]) {
      if (fi(x[i].u) != fi(x[i].v)) {
        fa[fi(x[i].u)] = fi(x[i].v);
        ans[++sl] = i;
      }
    } else
      x[i].bj = 1;
  for (int i = 1; i <= m; ++i)
    if (x[i].bj) {
      int t = x[i].u - s[0] && x[i].u - s[1] ? x[i].u : x[i].v;
      if (t - s[0] && t - s[1])
        sf[fi(t)][x[i].u + x[i].v == s[1] + t] = i;
      else
        ts = i;
    }
  for (int i = 1; i <= n; ++i)
    if (fi(i) == i && i - s[0] && i - s[1])
      if (sf[i][0] && sf[i][1])
        ++jl[3];
      else if (sf[i][0])
        --d[0], ans[++sl] = sf[i][0];
      else if (sf[i][1])
        --d[1], ans[++sl] = sf[i][1];
      else
        return 0;
  if (d[0] <= 0 || d[1] <= 0 || d[0] + d[1] <= jl[3] || (!ts && !jl[3])) {
    printf("No");
    return 0;
  }
  printf("Yes\n");
  if (!jl[3]) ans[++sl] = ts;
  for (int i = 1, pd = 0; i <= n; ++i)
    if (fi(i) == i && i - s[0] && i - s[1] && sf[i][0] && sf[i][1]) {
      if (d[0]) {
        --d[0];
        ans[++sl] = sf[i][0];
        if (!pd) ans[++sl] = sf[i][1], pd = 1;
      } else
        ans[++sl] = sf[i][1];
    }
  for (int i = 1; i < n; ++i) printf("%d %d\n", x[ans[i]].u, x[ans[i]].v);
  return 0;
}
