#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int par[N];
bool mark[N], mark2[N];
vector<int> u[N];
vector<pair<int, int> > v[N], ans, ans2;
pair<int, int> yal[N];
void dfs(int y, int r) {
  mark[y] = true;
  par[y] = r;
  for (int i = 0; i < v[y].size(); i++) {
    if (!mark[v[y][i].first]) {
      u[y].push_back(v[y][i].first);
      u[v[y][i].first].push_back(y);
      mark2[v[y][i].second] = true;
      dfs(v[y][i].first, r);
    }
  }
}
int root(int u) { return (par[u] == u) ? u : par[u] = root(par[u]); }
void mrg(int x, int y) {
  int dx = root(x), dy = root(y);
  if (dx == dy) return;
  par[dx] = dy;
}
int main() {
  int n, m;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    v[a].push_back({b, i});
    v[b].push_back({a, i});
    yal[i] = {a, b};
  }
  for (int i = 0; i < n; i++) {
    if (mark[i] == false) {
      dfs(i, i);
    }
  }
  for (int i = 0; i < n - 1; i++) {
    for (int j = i + 1; j < n; j++) {
      if (root(i) != root(j)) {
        u[i].push_back(j);
        u[j].push_back(i);
        ans.push_back({i, j});
        mrg(i, j);
      }
    }
  }
  for (int i = 0; i < n; i++) {
    if (mark2[i] == false) ans2.push_back(yal[i]);
  }
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) {
    cout << ans2[i].first + 1 << " " << ans2[i].second + 1 << " ";
    cout << ans[i].first + 1 << " " << ans[i].second + 1 << endl;
  }
}
