#include <bits/stdc++.h>
using namespace std;
int par[100005], rank_[100005], size_[100005];
int find_set(int a) {
  if (par[a] == a) return a;
  par[a] = find_set(par[a]);
  return par[a];
}
void make_set(int n) {
  par[n] = n;
  size_[n] = 1;
}
void union_set(int a, int b) {
  a = find_set(a);
  b = find_set(b);
  if (a != b) {
    if (size_[a] < size_[b]) {
      swap(a, b);
    }
    par[b] = a;
    size_[a] += size_[b];
  }
}
int main() {
  int tc;
  int n, t1, t2;
  map<int, vector<int>> mp;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    make_set(i);
  }
  vector<pair<int, int>> vec;
  for (int i = 0; i < n - 1; i++) {
    cin >> t1 >> t2;
    if (find_set(t1) == find_set(t2))
      vec.push_back({t1, t2});
    else {
      union_set(t1, t2);
    }
  }
  for (int i = 1; i <= n; i++) {
    mp[find_set(i)].push_back(i);
  }
  vector<int> rep;
  for (auto it : mp) {
    rep.push_back(it.first);
  }
  cout << vec.size() << endl;
  for (int i = 0; i < vec.size(); i++) {
    cout << vec[i].first << " " << vec[i].second << " " << rep[i] << " "
         << rep[i + 1] << endl;
  }
}
