#include <bits/stdc++.h>
struct edgex {
  int x, y;
} ex[400010], ans[200010];
struct edge {
  int to, nex;
} e[800010];
int h[200010], col[200010], fa[200010], n, tot, s, t, ds, dt, cnt, cstp;
bool st[200010], v[200010], done[200010], cst, mpst;
void add(int a, int b) {
  tot++;
  e[tot].to = b;
  e[tot].nex = h[a];
  h[a] = tot;
}
void dfs1(int f, int x) {
  col[x] = f;
  v[x] = 1;
  for (int i = h[x]; i; i = e[i].nex) {
    if (e[i].to != t && e[i].to != s && col[e[i].to] == 0) dfs1(f, e[i].to);
  }
}
void dfs2(int f, int x) {
  col[x] = f;
  for (int i = h[x]; i; i = e[i].nex) {
    if (e[i].to != t && e[i].to != s && col[e[i].to] == 0) dfs2(f, e[i].to);
  }
}
void calc(int x) {
  done[x] = 1;
  fa[x] = s;
  for (int i = h[x]; i; i = e[i].nex) {
    if (fa[e[i].to] != s) {
      cnt++;
      ans[cnt].x = x;
      ans[cnt].y = e[i].to;
      calc(e[i].to);
    }
  }
}
int getfa(int x) { return (x == fa[x]) ? x : fa[x] = getfa(fa[x]); }
int main() {
  int m, i, a;
  scanf("%d%d", &n, &m);
  for (i = 1; i <= m; i++) scanf("%d%d", &ex[i].x, &ex[i].y);
  scanf("%d%d%d%d", &s, &t, &ds, &dt);
  for (i = 1; i <= m; i++) {
    if ((ex[i].x == s && ex[i].y == t) || (ex[i].x == t && ex[i].y == s)) {
      cstp = i;
      cst = 1;
      break;
    }
  }
  for (i = 1; i <= m; i++) {
    if (i != cstp) {
      add(ex[i].x, ex[i].y);
      add(ex[i].y, ex[i].x);
    }
  }
  for (i = h[s]; i; i = e[i].nex) {
    if (col[e[i].to] == 0) dfs1(e[i].to, e[i].to);
  }
  for (i = h[t]; i; i = e[i].nex) {
    if (col[e[i].to] == 0)
      dfs2(e[i].to, e[i].to);
    else if (v[e[i].to]) {
      st[col[e[i].to]] = 1;
      mpst = 1;
    }
  }
  for (i = 1; i <= n; i++) fa[i] = i;
  fa[t] = s;
  for (i = h[s]; i; i = e[i].nex) {
    if (!st[col[e[i].to]] && !done[e[i].to]) {
      cnt++;
      ans[cnt].x = s;
      ans[cnt].y = e[i].to;
      ds--;
      calc(e[i].to);
    }
  }
  for (i = h[t]; i; i = e[i].nex) {
    if (!st[col[e[i].to]] && !done[e[i].to]) {
      cnt++;
      ans[cnt].x = t;
      ans[cnt].y = e[i].to;
      dt--;
      calc(e[i].to);
    }
  }
  if (cst && !mpst) {
    cnt++;
    ans[cnt].x = s;
    ans[cnt].y = t;
    ds--;
    dt--;
  } else {
    for (i = h[t]; i; i = e[i].nex) {
      if (st[col[e[i].to]]) {
        cnt++;
        ans[cnt].x = s;
        ans[cnt].y = col[e[i].to];
        ds--;
        cnt++;
        ans[cnt].x = t;
        ans[cnt].y = e[i].to;
        dt--;
        calc(col[e[i].to]);
        break;
      }
    }
  }
  if (dt < 0 || ds < 0) {
    puts("No");
    return 0;
  }
  i = h[s];
  while (i && ds > 0) {
    a = getfa(e[i].to);
    if (a != s) {
      fa[a] = s;
      cnt++;
      ans[cnt].x = s;
      ans[cnt].y = e[i].to;
      ds--;
      calc(e[i].to);
    }
    i = e[i].nex;
  }
  i = h[t];
  while (i && dt > 0) {
    a = getfa(e[i].to);
    if (a != s) {
      fa[a] = s;
      cnt++;
      ans[cnt].x = t;
      ans[cnt].y = e[i].to;
      dt--;
      calc(e[i].to);
    }
    i = e[i].nex;
  }
  for (i = 1; i <= n; i++) getfa(i);
  for (i = 1; i <= n; i++) {
    if (fa[i] != s) {
      puts("No");
      return 0;
    }
  }
  puts("Yes");
  for (i = 1; i < n; i++) printf("%d %d\n", ans[i].x, ans[i].y);
}
