#include <bits/stdc++.h>
using namespace std;
long long find_set(long long u, long long parent[]) {
  if (u == parent[u]) return u;
  return parent[u] = find_set(parent[u], parent);
}
bool find_union(long long u, long long v, long long parent[],
                long long size[]) {
  u = find_set(u, parent);
  v = find_set(v, parent);
  if (u == v)
    return 1;
  else {
    if (size[u] < size[v]) swap(u, v);
    parent[v] = u;
    size[u] += size[v];
    return 0;
  }
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t;
  t = 1;
  while (t--) {
    long long n;
    cin >> n;
    long long parent[n + 1], size[n + 1];
    for (long long i = 0; i <= n; i++) {
      parent[i] = i;
      size[i] = 1;
    }
    vector<pair<long long, long long> > res1, res2;
    for (long long j = 0; j < n - 1; j++) {
      long long u, v;
      cin >> u >> v;
      if (find_union(u, v, parent, size)) res1.push_back({u, v});
    }
    vector<long long> temp;
    for (long long i = 1; i <= n; i++)
      if (i == parent[i]) temp.push_back(i);
    for (auto i = temp.begin(); i != temp.end() - 1; i++)
      res2.push_back({*i, *(i + 1)});
    long long m = res1.size();
    cout << m << endl;
    for (long long i = 0; i < m; i++)
      cout << res1[i].first << " " << res1[i].second << " " << res2[i].first
           << " " << res2[i].second << endl;
  }
}
