#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > removee;
int te = 0;
vector<int> mo;
const int maxn = 10000 + 100;
bool check[maxn];
int par[maxn];
vector<int> vec[maxn];
map<pair<int, int>, bool> edge;
void dfs(int cur) {
  te++;
  check[cur] = 1;
  for (int i = 0; i < vec[cur].size(); i++) {
    int ne = vec[cur][i];
    if (!check[ne]) {
      par[ne] = cur;
      dfs(ne);
    } else if (ne != par[cur] && !edge[make_pair(ne, cur)]) {
      removee.push_back(make_pair(ne, cur));
      edge[make_pair(ne, cur)] = 1;
      edge[make_pair(cur, ne)] = 1;
    }
  }
}
int main() {
  int n, m, f, g, h, d;
  cin >> n;
  for (int i = 1; i < n; i++) {
    cin >> f >> g;
    vec[f].push_back(g);
    vec[g].push_back(f);
  }
  int it = 1;
  while (te < n) {
    while (check[it]) it++;
    mo.push_back(it);
    dfs(it);
  }
  cout << mo.size() - 1 << endl;
  for (int i = 0; i < removee.size(); i++)
    cout << removee[i].first << " " << removee[i].second << " " << mo[0] << " "
         << mo[i + 1] << endl;
}
