#include <bits/stdc++.h>
using namespace std;
struct DSU {
  vector<int> par;
  int total_components;
  vector<pair<int, int>> edge;
  void init(int n) {
    par.resize(n);
    for (int i = 0; i < n; i++) par[i] = i;
    total_components = n;
  }
  int get_superparent(int node) {
    if (node == par[node]) {
      return node;
    } else {
      return par[node] = get_superparent(par[node]);
    }
  }
  void unite(int x, int y) {
    int superparent_x = get_superparent(x);
    int superparent_y = get_superparent(y);
    if (superparent_x != superparent_y) {
      par[superparent_x] = superparent_y;
      total_components--;
    } else {
      edge.push_back({x, y});
    }
  }
};
void solve() {
  int n, u, v, j;
  cin >> n;
  DSU d;
  d.init(n);
  for (int i = 0; i < n - 1; i++) {
    cin >> u >> v;
    u--;
    v--;
    d.unite(u, v);
  }
  if (d.total_components == 1) {
    cout << 0;
    return;
  }
  j = 0;
  cout << d.edge.size() << "\n";
  for (int i = 1; i < n; i++) {
    if (d.get_superparent(0) != d.get_superparent(i)) {
      cout << d.edge[j].first + 1 << " " << d.edge[j].second + 1 << " "
           << d.get_superparent(0) + 1 << " " << d.get_superparent(i) + 1
           << "\n";
      d.unite(d.get_superparent(0), d.get_superparent(i));
      j++;
    }
  }
}
int32_t main() { solve(); }
