#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 1e2;
struct edge {
  int u, v, next;
} e[maxn * 4];
int ans[maxn], tot = 0, sccno[maxn], scc_cnt = 0, S, T, link[maxn][2],
               head[maxn], cnt = 0;
void insert(int t1, int t2) {
  e[++cnt].v = t2;
  e[cnt].u = t1;
  e[cnt].next = head[t1];
  head[t1] = cnt;
}
void dfs(int x) {
  sccno[x] = scc_cnt;
  for (int i = head[x]; i; i = e[i].next) {
    if (!sccno[e[i].v] && e[i].v != S && e[i].v != T) {
      ans[++tot] = i;
      dfs(e[i].v);
    }
  }
}
int getint() {
  char ch;
  int b = 1;
  for (ch = getchar(); ch > '9' || ch < '0'; ch = getchar())
    if (ch == '-') b = -1;
  int num = ch - '0';
  for (ch = getchar(); ch >= '0' && ch <= '9'; ch = getchar())
    num = num * 10 + ch - '0';
  return num * b;
}
int main() {
  int n = getint(), m = getint();
  for (int i = 1; i <= m; i++) {
    int t1 = getint(), t2 = getint();
    insert(t1, t2);
    insert(t2, t1);
  }
  S = getint(), T = getint();
  int ds = getint(), dt = getint();
  for (int i = 1; i <= n; i++) {
    if (!sccno[i] && i != S && i != T) {
      ++scc_cnt;
      dfs(i);
    }
  }
  for (int i = head[S]; i; i = e[i].next) link[sccno[e[i].v]][0] = i;
  for (int i = head[T]; i; i = e[i].next) link[sccno[e[i].v]][1] = i;
  int size = scc_cnt + 2;
  bool flag = true;
  for (int i = 1; i <= scc_cnt; i++) {
    if (!link[i][1]) {
      if (!link[i][0])
        flag = false;
      else {
        size--;
        ans[++tot] = link[i][0];
        ds--;
      }
    } else if (!link[i][0]) {
      size--;
      ans[++tot] = link[i][1];
      dt--;
    }
  }
  if (!flag || ds < 0 || dt < 0) {
    printf("No\n");
    return 0;
  }
  int linkst = 0;
  for (int i = 1; i <= scc_cnt; i++) {
    if (link[i][0] && link[i][1]) {
      if (!linkst && ds && dt) {
        linkst = 1;
        size -= 2;
        ds--;
        dt--;
        ans[++tot] = link[i][0];
        ans[++tot] = link[i][1];
      } else if (ds > 0) {
        size--;
        ds--;
        ans[++tot] = link[i][0];
      } else if (dt > 0) {
        size--;
        dt--;
        ans[++tot] = link[i][1];
      }
    }
  }
  if (size == 2 && !linkst) {
    for (int i = head[S]; i; i = e[i].next) {
      if (e[i].v == T && (ds && dt)) {
        size--;
        ds--;
        dt--;
        ans[++tot] = i;
      }
    }
  }
  if (size == 1) {
    printf("Yes\n");
    for (int i = 1; i <= tot; i++) printf("%d %d\n", e[ans[i]].u, e[ans[i]].v);
  } else
    printf("No\n");
  return 0;
}
