#include <bits/stdc++.h>
using namespace std;
const double pi = 2.0 * acos(0.0);
const double eps = 1.0e-9;
const int dr[] = {-1, 0, 1, 0}, dc[] = {0, 1, 0, -1};
const int dr6[] = {1, 1, 0, -1, -1, 0}, dc6[] = {0, 1, 1, 0, -1, -1};
const int dr8[] = {-1, -1, 0, 1, 1, 1, 0, -1},
          dc8[] = {0, 1, 1, 1, 0, -1, -1, -1};
int n, id[1024], seq, va[1024], vb[1024], vc[1024], vd[1024], k1, k2, rt[1024];
vector<int> g[1024];
int root_of(int x) { return (x == rt[x] ? x : (rt[x] = root_of(rt[x]))); }
void dfs(int i, int f = 0) {
  id[i] = ++seq;
  for (size_t j = g[i].size(); j-- > 0;)
    if (g[i][j] != f) {
      if (id[g[i][j]]) {
        if (id[i] > id[g[i][j]]) va[k1] = i, vb[k1] = g[i][j], ++k1;
      } else
        dfs(g[i][j], i);
    }
}
int main(void) {
  int kase = 1000000000;
  for (int ks = 1; ks <= kase && 1 == scanf("%d", &n); ++ks) {
    for (int i = 1; i <= n; ++i) g[i].clear();
    for (int i = 1, a, b; i < n && 2 == scanf("%d %d", &a, &b); ++i)
      g[a].push_back(b), g[b].push_back(a);
    seq = k1 = k2 = 0;
    memset(id, 0, sizeof(id));
    for (int i = 1; i <= n; ++i)
      if (!id[i]) dfs(i);
    for (int i = 1; i <= n; ++i) rt[i] = i;
    for (int i = 1; i <= n; ++i)
      for (size_t j = g[i].size(); j-- > 0;) {
        int ra = root_of(i), rb = root_of(g[i][j]);
        if (ra != rb) rt[rb] = ra;
      }
    for (int i = 1; i <= n; ++i)
      if (i == root_of(i)) {
        for (int j = i + 1; j <= n; ++j)
          if (j == root_of(j)) vc[k2] = i, vd[k2] = j, ++k2;
        break;
      }
    printf("%d\n", k1);
    for (int i = 0; i < k1; ++i)
      printf("%d %d %d %d\n", va[i], vb[i], vc[i], vd[i]);
  }
  return 0;
}
