#include <bits/stdc++.h>
using namespace std;
int n, par[2000];
vector<pair<int, int> > edge;
vector<pair<pair<int, int>, pair<int, int> > > ans;
set<pair<int, int> > rem;
int find_father(int v) {
  if (par[v] == v) return v;
  return par[v] = find_father(par[v]);
}
bool ism(int u, int v) { return find_father(u) == find_father(v); }
void mrg(int u, int v) { par[find_father(u)] = find_father(v); }
int main() {
  cin >> n;
  pair<int, int> a;
  for (int i = 0; i < n - 1; i++) cin >> a.first >> a.second, edge.push_back(a);
  for (int i = 1; i <= n; i++) par[i] = i;
  for (int i = 0; i < n - 1; i++) {
    if (!ism(edge[i].first, edge[i].second))
      mrg(edge[i].first, edge[i].second);
    else
      rem.insert(edge[i]);
  }
  for (int i = 2; i <= n; i++) {
    if (!ism(1, i)) {
      pair<int, int> b = *rem.begin();
      rem.erase(b);
      ans.push_back(make_pair(b, make_pair(1, i)));
      mrg(1, i);
    }
  }
  cout << (int)ans.size() << endl;
  for (int i = 0; i < (int)ans.size(); i++) {
    cout << ans[i].first.first << " " << ans[i].first.second << " "
         << ans[i].second.first << " " << ans[i].second.second << endl;
  }
  return 0;
}
