#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  bool flag = false;
  while (!isdigit(c)) {
    if (c == '-') flag = true;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c ^ 48);
    c = getchar();
  }
  if (flag) x = -x;
}
int n;
int fa[500010], f[19][500010], dep[500010], deg[500010];
bool vis[500010];
struct node {
  struct edge {
    int to, nxt;
    edge(int a = 0, int b = 0) { to = a, nxt = b; }
  } e[500010];
  int head[500010], edge_cnt;
  void add(int from, int to) {
    e[++edge_cnt] = edge(to, head[from]), head[from] = edge_cnt;
  }
} A, B;
int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }
void dfs(int x, int fa) {
  dep[x] = dep[f[0][x] = fa] + 1;
  for (int i = 1; i <= 17; ++i) f[i][x] = f[i - 1][f[i - 1][x]];
  for (int i = A.head[x]; i; i = A.e[i].nxt) {
    int y = A.e[i].to;
    if (y == fa) continue;
    dfs(y, x);
  }
}
int lca(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  for (int i = 17; i >= 0; --i)
    if (f[i][x] && dep[f[i][x]] >= dep[y]) x = f[i][x];
  if (x == y) return x;
  for (int i = 17; i >= 0; --i)
    if (f[i][x] && f[i][x] != f[i][y]) x = f[i][x], y = f[i][y];
  return f[0][x];
}
void work() {
  queue<int> q;
  for (int i = 1; i <= n; ++i)
    if (deg[i] == 1) q.push(i);
  while (q.size() > 1) {
    int x = q.front(), y, anc, u, v;
    q.pop(), vis[x] = true;
    for (int i = B.head[x]; i; i = B.e[i].nxt) {
      if (vis[y = B.e[i].to]) continue;
      if (--deg[y] == 1) q.push(y);
      break;
    }
    anc = lca(x, y);
    if (dep[u = find(x)] > dep[anc])
      printf("%d %d %d %d\n", u, f[0][u], x, y), fa[find(u)] = find(f[0][u]);
    else {
      v = y;
      for (int i = 17; i >= 0; --i)
        if (f[i][v] && dep[f[i][v]] > dep[anc] && find(f[i][v]) != u)
          v = f[i][v];
      printf("%d %d %d %d\n", v, f[0][v], x, y), fa[find(v)] = find(f[0][v]);
    }
  }
}
int main() {
  read(n), printf("%d\n", n - 1);
  for (int i = 1; i <= n; ++i) fa[i] = i;
  for (int i = 1; i < n; ++i) {
    int x, y;
    read(x), read(y);
    A.add(x, y), A.add(y, x);
  }
  for (int i = 1; i < n; ++i) {
    int x, y;
    read(x), read(y), deg[x]++, deg[y]++;
    B.add(x, y), B.add(y, x);
  }
  dfs(1, 0), work();
  return 0;
}
