#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > ed, od, nw;
set<int> lft;
int prnt[1005] = {}, rnk[1005] = {};
int find_set(int v) {
  if (v == prnt[v]) return v;
  return prnt[v] = find_set(prnt[v]);
}
void make_set(int v) {
  prnt[v] = v;
  rnk[v] = 0;
}
void union_sets(int a, int b, bool flg) {
  int u = a, v = b;
  a = find_set(a);
  b = find_set(b);
  if (a != b) {
    if (rnk[a] < rnk[b]) swap(a, b);
    prnt[b] = a;
    lft.erase(b);
    if (rnk[a] == rnk[b]) rnk[a]++;
  } else {
    if (!flg)
      od.push_back(pair<int, int>(u, v));
    else {
      auto it = lft.find(a);
      if (it != lft.begin())
        it--;
      else
        it++;
      b = *it;
      if (rnk[a] < rnk[b]) swap(a, b);
      prnt[b] = a;
      lft.erase(b);
      if (rnk[a] == rnk[b]) rnk[a]++;
      nw.push_back(pair<int, int>(a, b));
    }
  }
}
int main() {
  int n, a, b;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    cin >> a >> b;
    ed.push_back(pair<int, int>(a, b));
    lft.insert(i + 1);
  }
  lft.insert(n);
  for (int i = 1; i <= n; i++) make_set(i);
  for (auto e : ed) union_sets(e.first, e.second, 0);
  for (auto o : od) union_sets(o.first, o.second, 1);
  cout << nw.size() << '\n';
  for (int i = 0; i < nw.size(); i++)
    cout << od[i].first << ' ' << od[i].second << ' ' << nw[i].first << ' '
         << nw[i].second << '\n';
  return 0;
}
