#include <bits/stdc++.h>
using namespace std;
struct subset {
  int parent;
  int rank;
};
int find(struct subset subsets[], int i) {
  if (subsets[i].parent != i)
    subsets[i].parent = find(subsets, subsets[i].parent);
  return subsets[i].parent;
}
void Union(struct subset subsets[], int x, int y) {
  int xroot = find(subsets, x);
  int yroot = find(subsets, y);
  if (subsets[xroot].rank < subsets[yroot].rank)
    subsets[xroot].parent = yroot;
  else if (subsets[xroot].rank > subsets[yroot].rank)
    subsets[yroot].parent = xroot;
  else {
    subsets[yroot].parent = xroot;
    subsets[xroot].rank++;
  }
}
int main() {
  int n, b, a;
  cin >> n;
  int us[1001] = {0};
  vector<pair<int, int> > v, rs;
  for (int i = 0; i < n - 1; i++) {
    scanf("%d%d", &a, &b);
    if (a > b) swap(a, b);
    v.push_back(make_pair(a, b));
  }
  struct subset p[n + 1];
  for (int i = 1; i <= n; i++) {
    p[i].parent = i;
    p[i].rank = 0;
  }
  int val = 0;
  for (int i = 0; i < n - 1; i++) {
    int l = v[i].first;
    int r = v[i].second;
    if (find(p, l) != find(p, r)) {
      Union(p, l, r);
      val++;
    } else {
      rs.push_back(make_pair(l, r));
    }
  }
  vector<int> ps;
  if (val == n - 1) {
    cout << "0" << endl;
    return 0;
  }
  val = 0;
  for (int i = 1; i <= n; i++) {
    if (p[i].parent == i) {
      val++;
      ps.push_back(i);
    }
  }
  cout << val - 1 << endl;
  for (int i = 0; i < val - 1; i++) {
    cout << rs[i].first << " " << rs[i].second << " " << ps[i] << " "
         << ps[i + 1] << endl;
  }
  return 0;
}
