#include <bits/stdc++.h>
using namespace std;
map<int, bool> is_visited;
int par[100100];
vector<pair<int, int>> globe;
map<pair<int, int>, bool> in_globe;
void addEdge(vector<int> adj[], int u, int v) {
  adj[u].push_back(v);
  adj[v].push_back(u);
}
void dfs(vector<int> adj[], int u) {
  is_visited[u] = true;
  for (auto v : adj[u]) {
    if (is_visited[v] and par[u] != v and !in_globe[make_pair(u, v)]) {
      globe.push_back(make_pair(u, v));
      in_globe[make_pair(u, v)] = true;
      in_globe[make_pair(v, u)] = true;
    }
    if (!is_visited[v]) {
      par[v] = u;
      dfs(adj, v);
    }
  }
}
int main() {
  int n;
  cin >> n;
  vector<int> adj[n + 2];
  for (int i = 1; i < n; i++) {
    int u, v;
    cin >> u >> v;
    addEdge(adj, u, v);
  }
  vector<int> vec;
  for (int i = 1; i <= n; i++) {
    if (!is_visited[i]) {
      vec.push_back(i);
      dfs(adj, i);
    }
  }
  cout << globe.size() << endl;
  for (int i = 0; i < globe.size(); i++) {
    cout << globe[i].first << " " << globe[i].second << " " << vec[i] << " "
         << vec[i + 1] << endl;
  }
  return 0;
}
