#include <bits/stdc++.h>
using namespace std;
vector<int> v[200069];
int odw[200069];
vector<pair<int, int> > odp;
void dfs(int x, int n) {
  odw[x] = n;
  for (int i = 0; i < v[x].size(); i++) {
    if (odw[v[x][i]] == 0) {
      odp.push_back(make_pair(x, v[x][i]));
      dfs(v[x][i], n);
    }
  }
}
int main() {
  int n, m;
  cin >> n >> m;
  pair<int, int> p[m];
  for (int i = 0; i < m; i++) {
    cin >> p[i].first >> p[i].second;
  }
  int s, t, ds, dt;
  cin >> s >> t >> ds >> dt;
  vector<pair<int, int> > q;
  for (int i = 0; i < m; i++) {
    if (p[i].first == s || p[i].second == s || p[i].second == t ||
        p[i].first == t) {
      q.push_back(p[i]);
    } else {
      v[p[i].first].push_back(p[i].second);
      v[p[i].second].push_back(p[i].first);
    }
  }
  int licznik = 1;
  for (int i = 1; i <= n; i++) {
    if (odw[i] == 0 && i != t && i != s) {
      dfs(i, licznik);
      licznik++;
    }
  }
  map<int, int> ss, tt;
  bool czyts = 0;
  for (int i = 0; i < q.size(); i++) {
    if (q[i].first == s && q[i].second == t) {
      czyts = 1;
      continue;
    }
    if (q[i].second == s && q[i].first == t) {
      czyts = 1;
      continue;
    }
    if (q[i].second == s) {
      ss[odw[q[i].first]] = q[i].first;
    }
    if (q[i].first == s) {
      ss[odw[q[i].second]] = q[i].second;
    }
    if (q[i].first == t) {
      tt[odw[q[i].second]] = q[i].second;
    }
    if (q[i].second == t) {
      tt[odw[q[i].first]] = q[i].first;
    }
  }
  int liczss = 0, licztt = 0;
  for (int i = 1; i <= n; i++) {
    if (ss[i] != 0 && tt[i] == 0) {
      liczss++;
      odp.push_back(make_pair(s, ss[i]));
    }
    if (ss[i] == 0 && tt[i] != 0) {
      licztt++;
      odp.push_back(make_pair(t, tt[i]));
    }
  }
  bool czyp = 0;
  for (int i = 1; i <= n; i++) {
    if (ss[i] != 0 && tt[i] != 0) {
      if (czyp == 0) {
        odp.push_back(make_pair(s, ss[i]));
        odp.push_back(make_pair(t, tt[i]));
        czyp = 1;
        liczss++;
        licztt++;
        continue;
      } else {
        if (ds - liczss > dt - licztt) {
          odp.push_back(make_pair(s, ss[i]));
          liczss++;
        } else {
          odp.push_back(make_pair(t, tt[i]));
          licztt++;
        }
      }
    }
  }
  if (czyp == 0 && czyts == 1) {
    odp.push_back(make_pair(s, t));
    czyp = 1;
    liczss++;
    licztt++;
  }
  if (min(dt - licztt, ds - liczss) < 0) {
    cout << "No";
    return 0;
  } else {
    cout << "Yes\n";
    for (int i = 0; i < odp.size(); i++) {
      cout << odp[i].first << " " << odp[i].second << endl;
    }
  }
}
