#include <bits/stdc++.h>
using namespace std;
void read(int &a) {
  a = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    a = (a << 1) + (a << 3) + c - '0';
    c = getchar();
  }
}
int Set(int n, int pos) { return n = n | (1LL << pos); }
int reset(int n, int pos) { return n = n & ~(1LL << pos); }
bool check(int n, int pos) { return (bool)(n & (1LL << pos)); }
int mul(int a, int b) {
  int c;
  c = (a % 1000000007 * b % 1000000007) % 1000000007;
  return c;
}
int add(int a, int b) {
  int c;
  c = (a % 1000000007 + b % 1000000007) % 1000000007;
  return c;
}
int sub(int a, int b) {
  int c;
  c = ((a % 1000000007 - b % 1000000007) % 1000000007 + 1000000007) %
      1000000007;
  return c;
}
int power(int x, int y) {
  int res = 1;
  x = x;
  while (y > 0) {
    if (y & 1) res = (res * x);
    y = y >> 1;
    x = (x * x);
  }
  return res;
}
long long exgcd(long long x, long long y, long long &a, long long &b) {
  int flag = 0;
  long long t, la = 1, lb = 0, ra = 0, rb = 1;
  while (x % y) {
    if (flag == 0)
      la -= x / y * ra, lb -= x / y * rb;
    else
      ra -= x / y * la, rb -= x / y * lb;
    t = x, x = y, y = t % y;
    flag = 1 - flag;
  }
  if (flag == 0)
    a = ra, b = rb;
  else
    a = la, b = lb;
  return y;
}
int n;
vector<pair<int, int> > edges;
int par[1100];
int find_par(int u) {
  if (par[u] == u)
    return u;
  else
    return par[u] = find_par(par[u]);
}
vector<int> pare;
int main() {
  read(n);
  for (int i = 1; i <= n; i++) par[i] = i;
  for (int i = 1; i < n; i++) {
    int u, v;
    read(u);
    read(v);
    int first = find_par(u);
    int second = find_par(v);
    if (first == second)
      edges.push_back(pair<int, int>(u, v));
    else
      par[first] = second;
  }
  for (int i = 1; i <= n; i++) {
    if (par[i] == i) pare.push_back(i);
  }
  if (pare.size() == 1)
    printf("0\n");
  else {
    printf("%d\n", edges.size());
    for (int i = 0, j = 1; i < edges.size() && j < pare.size(); i++, j++) {
      printf("%d %d %d %d\n", edges[i].first, edges[i].second, pare[0],
             pare[j]);
    }
  }
  return 0;
}
