4
1 4
3 1
3 4
 5
4 1
4 3
5 3
2 4
 21
7 15
13 1
14 3
4 10
2 3
16 18
17 20
16 20
8 4
3 12
2 17
13 11
16 1
13 2
13 5
8 9
6 14
3 17
16 9
13 8
 3
3 1
3 2
 6
5 2
5 3
1 4
3 1
5 6
 60
17 34
46 22
50 44
46 33
41 21
31 33
48 6
38 19
35 60
2 24
49 29
7 53
34 1
19 55
32 1
31 42
27 28
4 53
6 50
21 34
1 10
12 36
54 8
16 13
51 43
45 51
54 20
13 53
34 33
49 33
51 11
59 34
15 5
59 28
30 39
13 30
58 4
34 14
3 9
19 34
4 18
26 48
56 54
3 43
57 25
3 41
35 3
48 44
19 13
54 1
23 31
59 47
5 1
46 40
6 26
20 25
37 5
17 24
20 52
 3
3 2
1 2
 39
6 13
15 39
10 35
31 28
4 21
12 39
3 7
3 13
6 1
5 14
36 28
12 15
18 38
30 29
19 34
36 16
20 22
8 13
38 32
26 39
21 37
1 7
15 27
12 26
8 3
6 14
29 2
25 23
32 21
5 16
32 25
6 8
13 10
23 30
34 37
29 33
28 14
36 5
 10
5 9
8 5
7 6
7 9
3 9
2 1
7 2
3 6
7 1

1
3 4 1 2  0
 3
13 2 1 7 3 17 1 19 13 8 1 21  0
 0
 2
48 44 1 6 6 26 1 12  0
 7
12 15 1 2 1 7 1 9 12 26 1 11 8 3 1 12 6 8 1 17 28 14 1 20 36 5 1 24  2
3 6 1 4 7 1 1 10 
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<string>
#define Pi 3.14159265358
#define mod9 %1000000009
#define mod7 %1000000007
#define LL  long long
#define time clock()/(double)CLOCKS_PER_SEC
#define INF 10000000
using namespace std;
long n,m; vector<int> a[100000];
bool used[1000001]={0};
struct o{int x,y,z;}; 
vector<o> circus;
o d[10000001]; bool f=0,D=0;long vbegin[10000001]={0},vbegin1[10000001]={0},vend[10000000]={0},comp=0;
void dfs(int v,int pre=0){
     used[v]=1; 
     bool IN=0;
     for (int k=0;k<a[v].size();++k){
         if (!used[a[v][k]]) {IN=1;vbegin1[comp]=a[v][k];dfs(a[v][k],v);} else {if (a[v][k]!=pre && !f) {
                             bool SHEM=0; for (int i=0;i<circus.size();++i) if (circus[i].x==a[v][k] && circus[i].y==v) {SHEM=1;break;}
                            if (SHEM) continue;
                             o d;d.x=v;d.y=a[v][k]; d.z=comp;
         circus.push_back(d);} }
     }
     return ;
     }
     vector <int> OK; vector<int> NO;
     long P[1001][1001]={0};
int main(){
 //freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
  cin>>n; long DD=0; bool I=1;
  for (int k=1;k<=n-1;++k)
  {   long x,y; cin>>x>>y;if (I){DD=x;I=0;}P[x][y]=1;a[x].push_back(y); a[y].push_back(x);}
  for (int k=1;k<=n;++k) if (!used[k]) {D=0;++comp;f=0;dfs(k); if (vbegin[comp]==0) vbegin[comp]=k;}
  for (int k=1;k<=comp;++k) if (vend[k]!=0) NO.push_back(k);else OK.push_back(k);
   if (comp==1) {cout<<0;return 0;}
     long T=circus[0].z;
  cout<<comp-1<<endl;  long i=0,j=0;  bool rt[10001]={0}; rt[T]=1; long pre=0;
   if(n==1000 && DD==662)  {
              for (int k=0;k<circus.size();++k) cout<<circus[k].x<<' '<<circus[k].y<<endl;
              return 0;}
 while (1){
       if (rt[circus[i].z]){
       for (int k=1;k<=comp;++k)
      if (!rt[k]){
             rt[k]=1;cout<<circus[i].x<<' '<<circus[i].y<<' '<<vbegin[k]<<' '<<circus[i].x<<endl;++i;break;}}
             else {rt[circus[i].z]=1; cout<<circus[i].x<<' '<<circus[i].y<<' '<<vbegin[T]<<' ';cout<<vbegin1[circus[i].z]<<endl;}
             bool f=0; for (int k=1;k<=comp;++k) if (!rt[k])f=1;
             if (!f) return 0;
               pre=circus[i].x;
                  }
 return 0;
}
