#include <bits/stdc++.h>
using namespace std;
int p[400050];
int ran[400050];
int find_set(int a) { return p[a] == a ? a : (p[a] = find_set(p[a])); }
int unite(int a, int b) {
  int x = find_set(a);
  int y = find_set(b);
  if (x == y) return -1;
  if (ran[x] < ran[y]) {
    p[x] = y;
  } else {
    p[y] = x;
    if (ran[x] == ran[y]) ran[x]++;
  }
  return 0;
}
pair<int, pair<int, int> > ed[400050];
int viz[200050];
int main() {
  int n, m;
  int s, t, ds, dt;
  int di = 0, dii = 0;
  int tes = 0;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    ed[i] = make_pair(0, make_pair(a, b));
  }
  scanf("%d %d %d %d", &s, &t, &ds, &dt);
  for (int i = 0; i < m; i++) {
    if ((ed[i].second.first == s && ed[i].second.second == t) ||
        (ed[i].second.second == s && ed[i].second.first == t)) {
      ed[i] = make_pair(2, make_pair(ed[i].second.first, ed[i].second.second));
    } else if (ed[i].second.first == s || ed[i].second.second == s) {
      ed[i] = make_pair(1, make_pair(ed[i].second.first, ed[i].second.second));
      viz[ed[i].second.first] |= 1;
      viz[ed[i].second.second] |= 1;
    } else if (ed[i].second.first == t || ed[i].second.second == t) {
      ed[i] = make_pair(1, make_pair(ed[i].second.first, ed[i].second.second));
      viz[ed[i].second.first] |= 2;
      viz[ed[i].second.second] |= 2;
    }
  }
  sort(ed, ed + m);
  for (int i = 0; i <= n; i++) {
    p[i] = i;
    ran[i] = 1;
  }
  int i;
  for (i = 0; i < m; i++) {
    if (ed[i].first) break;
    if (find_set(ed[i].second.first) != find_set(ed[i].second.second)) {
      tes++;
      unite(ed[i].second.first, ed[i].second.second);
      ed[i] = make_pair(-1, make_pair(ed[i].second.first, ed[i].second.second));
    }
  }
  for (int j = i; j < m; j++) {
    int q = (ed[j].second.first == s || ed[j].second.first == t)
                ? ed[j].second.second
                : ed[j].second.first;
    if (ed[j].first == 2) break;
    if (viz[q] == 3) continue;
    if (find_set(ed[j].second.first) != find_set(ed[j].second.second)) {
      if (ed[j].second.first == s || ed[j].second.second == s) {
        if (di == ds) continue;
        di++;
      }
      if (ed[j].second.first == t || ed[j].second.second == t) {
        if (dii == dt) continue;
        dii++;
      }
      tes++;
      unite(ed[j].second.first, ed[j].second.second);
      ed[j] = make_pair(-1, make_pair(ed[j].second.first, ed[j].second.second));
    }
  }
  for (int j = i; j < m; j++) {
    if (find_set(ed[j].second.first) != find_set(ed[j].second.second)) {
      if (ed[j].second.first == s || ed[j].second.second == s) {
        if (di == ds) continue;
        di++;
      }
      if (ed[j].second.first == t || ed[j].second.second == t) {
        if (dii == dt) continue;
        dii++;
      }
      tes++;
      unite(ed[j].second.first, ed[j].second.second);
      ed[j] = make_pair(-1, make_pair(ed[j].second.first, ed[j].second.second));
    }
  }
  if (tes != n - 1) {
    printf("No\n");
  } else {
    printf("Yes\n");
    for (int i = 0; i < m; i++) {
      if (ed[i].first == -1)
        printf("%d %d\n", ed[i].second.first, ed[i].second.second);
    }
  }
  return 0;
}
