#include <bits/stdc++.h>
using namespace std;
int i, j, k, m, n, x, y, ans, o1[200020], as[200020 << 1], u1[200020],
    fa[200020], d1, d2, ct, s, t, vis[200020 << 1], o[200020], u[200020];
struct node {
  int x, y;
} e[200020 << 1];
inline int find(int x) {
  while (x != fa[x]) x = fa[x] = fa[fa[x]];
  return x;
}
int main() {
  scanf("%d%d", &n, &m);
  for (i = 1; i <= n; ++i) fa[i] = i;
  for (i = 1; i <= m; ++i) scanf("%d%d", &e[i].x, &e[i].y);
  scanf("%d%d%d%d", &s, &t, &d1, &d2);
  for (i = 1; i <= m; ++i)
    if (e[i].x != s && e[i].x != t && e[i].y != s && e[i].y != t) {
      int p = find(e[i].x), q = find(e[i].y);
      if (p != q) vis[i] = 1, fa[p] = q, ++ans;
    }
  for (i = 1; i <= m; ++i)
    if ((e[i].x == s || e[i].y == s) && (e[i].x != t && e[i].y != t)) {
      if (e[i].x == s)
        ++o[find(e[i].y)], o1[find(e[i].y)] = i;
      else
        ++o[find(e[i].x)], o1[find(e[i].x)] = i;
    }
  for (i = 1; i <= m; ++i)
    if ((e[i].x == t || e[i].y == t) && (e[i].x != s && e[i].y != s)) {
      if (e[i].x == t)
        ++u[find(e[i].y)], u1[find(e[i].y)] = i;
      else
        ++u[find(e[i].x)], u1[find(e[i].x)] = i;
    }
  for (i = 1; i <= n; ++i)
    if (o[i] && !u[i]) {
      int p = find(e[o1[i]].x), q = find(e[o1[i]].y);
      if (p != q) as[++ct] = o1[i], --d1, ++ans, fa[p] = q;
    }
  for (i = 1; i <= n; ++i)
    if (u[i] && !o[i]) {
      int p = find(e[u1[i]].x), q = find(e[u1[i]].y);
      if (p != q) as[++ct] = u1[i], --d2, ++ans, fa[p] = q;
    }
  if (d1 < 0 || d2 < 0) return puts("No"), 0;
  for (i = 1; i <= n; ++i)
    if (o[i] && u[i]) {
      if (i != s)
        if (d1 > 0) {
          int p = find(e[o1[i]].x), q = find(e[o1[i]].y);
          if (p != q) --d1, as[++ct] = o1[i], ++ans, fa[p] = q;
        }
      if (i != t)
        if (d2 > 0) {
          int p = find(e[u1[i]].x), q = find(e[u1[i]].y);
          if (p != q) --d2, as[++ct] = u1[i], ++ans, fa[p] = q;
        }
    }
  for (i = 1; i <= m; ++i)
    if ((e[i].x == s && e[i].y == t) || (e[i].y == s && e[i].x == t))
      if (ans == n - 2) as[++ct] = i, ++ans, --d1, --d2;
  if (ans != n - 1 || d1 < 0 || d2 < 0) return puts("No"), 0;
  puts("Yes");
  for (i = 1; i <= m; ++i)
    if (vis[i]) printf("%d %d\n", e[i].x, e[i].y);
  for (i = 1; i <= ct; ++i) printf("%d %d\n", e[as[i]].x, e[as[i]].y);
}
