#include <bits/stdc++.h>
using namespace std;
const int INF = 2e9;
const long long ML = 4e18;
vector<int> e1[300010], e2[300010];
int dep[300010], id[300010];
int fa1[300010][20], fa2[300010];
void dfs1(int i, int f, int d) {
  dep[i] = d;
  fa1[i][0] = f;
  for (int j : e1[i]) {
    if (j == f) continue;
    dfs1(j, i, d + 1);
  }
}
int idx, n;
void dfs2(int i, int f) {
  id[idx++] = i;
  fa2[i] = f;
  for (int j : e2[i]) {
    if (j == f) continue;
    dfs2(j, i);
  }
}
int pa[300010];
int getPa(int x) { return pa[x] == 0 ? x : pa[x] = getPa(pa[x]); }
void merge(int x, int y) {
  x = getPa(x);
  y = getPa(y);
  pa[x] = y;
}
bool check(int x, int y) { return getPa(x) == getPa(y); }
int jump(int y, int x, int d) {
  for (int i = (19); i >= (0); --i) {
    if (fa1[y][i] && dep[fa1[y][i]] > d && getPa(fa1[y][i]) != x) y = fa1[y][i];
  }
  return y;
}
void init() {
  memset(dep, 0, sizeof(dep));
  memset(id, 0, sizeof(id));
  memset(fa1, 0, sizeof(fa1));
  memset(pa, 0, sizeof(pa));
  idx = 1;
  dfs1(1, 0, 1);
  dfs2(1, 0);
  for (int i = (1); i < (20); ++i) {
    for (int j = (1); j < (n + 1); ++j) {
      fa1[j][i] = fa1[fa1[j][i - 1]][i - 1];
    }
  }
}
int lca(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  int d = dep[x] - dep[y];
  for (int i = (19); i >= (0); --i) {
    if (d & (1 << i)) x = fa1[x][i];
  }
  if (x == y) return x;
  for (int i = (19); i >= (0); --i) {
    if (fa1[x][i] != fa1[y][i]) {
      x = fa1[x][i];
      y = fa1[y][i];
    }
  }
  if (x == y) return x;
  return fa1[x][0];
}
void solve() {
  cin >> n;
  for (int i = (1); i < (n); ++i) {
    int x, y;
    cin >> x >> y;
    e1[x].push_back(y);
    e1[y].push_back(x);
  }
  for (int i = (1); i < (n); ++i) {
    int x, y;
    cin >> x >> y;
    e2[x].push_back(y);
    e2[y].push_back(x);
  }
  init();
  cout << n - 1 << "\n";
  for (int i = (n); i >= (2); --i) {
    int x = id[i], y = fa2[x];
    int l = lca(x, y);
    if (!check(x, l)) {
      int u = getPa(x), v = fa1[u][0];
      merge(u, v);
      cout << u << " " << v << " " << x << " " << y << endl;
    } else {
      int u = jump(y, getPa(x), dep[l]);
      int v = fa1[u][0];
      merge(u, v);
      cout << u << " " << v << " " << x << " " << y << endl;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  solve();
  return 0;
}
