#include <bits/stdc++.h>
using namespace std;
const int mo = 998244353;
const double PI = acos(-1.0);
template <typename _T>
_T Fabs(_T x) {
  return x < 0 ? -x : x;
}
template <typename _T>
void read(_T &x) {
  _T f = 1;
  x = 0;
  char s = getchar();
  while (s > '9' || s < '0') {
    if (s == '-') f = -1;
    s = getchar();
  }
  while ('0' <= s && s <= '9') {
    x = (x << 3) + (x << 1) + (s ^ 48);
    s = getchar();
  }
  x *= f;
}
int n, fa1[500005], fa2[500005], tot, head[500005], sum, Head[500005], Tot,
    dep[500005], fa[500005], idx;
set<int> cut[500005], link[500005];
struct ming {
  int id, dp;
} a[500005];
struct edge {
  int to, nxt;
} e[500005 << 1], E[500005 << 1];
struct node {
  int u, v;
} b[500005];
void addEdge(int u, int v) {
  e[++tot] = (edge){v, head[u]};
  head[u] = tot;
}
void addedge(int u, int v) {
  E[++Tot] = (edge){v, Head[u]};
  Head[u] = Tot;
}
void dfs1(int u, int fa) {
  dep[u] = dep[fa] + 1;
  fa1[u] = fa;
  for (int i = head[u]; i; i = e[i].nxt)
    if (e[i].to != fa) dfs1(e[i].to, u);
}
void dfs2(int u, int fa) {
  fa2[u] = fa;
  for (int i = Head[u]; i; i = E[i].nxt)
    if (E[i].to != fa) dfs2(E[i].to, u);
}
bool cmp(ming x, ming y) { return x.dp > y.dp; }
void makeSet(int x) {
  for (int i = 1; i <= x; i++) fa[i] = i;
}
int findSet(int x) { return fa[x] == x ? x : fa[x] = findSet(fa[x]); }
signed main() {
  read(n);
  for (int i = 1, u, v; i < n; i++)
    read(u), read(v), addEdge(u, v), addEdge(v, u);
  dfs1(1, 0);
  for (int i = 1, u, v; i < n; i++)
    read(u), read(v), addedge(u, v), addedge(v, u);
  dfs2(1, 0);
  for (int i = 1; i <= n; i++)
    if (fa1[i] != fa2[i] && i != fa2[fa1[i]]) sum++;
  for (int i = 1; i <= n; i++) a[i] = (ming){i, dep[i]};
  printf("%d\n", sum);
  sort(a + 1, a + n + 1, cmp);
  makeSet(n);
  for (int i = 1; i <= n; i++)
    if (fa1[i] == fa2[i] || fa1[fa2[i]] == i) fa[i] = fa2[i];
  for (int i = 1; i <= n; i++) {
    int k = a[i].id;
    if (fa1[k] != fa2[k] && fa2[fa1[k]] != k)
      printf("%d %d %d %d\n", k, fa1[k], findSet(k), fa2[findSet(k)]);
  }
  return 0;
}
