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 
import java.util.*;
import java.io.*;
 
public class AiseHi {
	static class FastReader 
    { 
        BufferedReader br; 
        StringTokenizer st; 

        public FastReader() 
        { 
            br = new BufferedReader(new
                     InputStreamReader(System.in)); 
        } 

        String next() 
        { 
            while (st == null || !st.hasMoreElements()) 
            { 
                try
                { 
                    st = new StringTokenizer(br.readLine()); 
                } 
                catch (IOException  e) 
                { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } 

        int nextInt() 
        { 
            return Integer.parseInt(next()); 
        } 

        long nextLong() 
        { 
            return Long.parseLong(next()); 
        } 

        double nextDouble() 
        { 
            return Double.parseDouble(next()); 
        } 

        String nextLine() 
        { 
            String str = ""; 
            try
            { 
                str = br.readLine(); 
            } 
            catch (IOException e) 
            { 
                e.printStackTrace(); 
            } 
            return str; 
        } 
    }
	static int par[] = new int[10000];
	static int size[] = new int[10000];
	public static void main (String[] args) {
		FastReader sc = new FastReader();
		PrintWriter out = new PrintWriter(System.out);
		int t = 1;
//    	t = sc.nextInt();
    	while(t-->0) {
    		 int n = sc.nextInt();
    		 for(int i=1;i<=n;i++) {
    			 par[i] = i;
    			 size[i] = 1;
    		 }
    		 List<pair> l = new ArrayList<>();
    		 for(int i=1;i<n;i++) {
    			 int u = sc.nextInt();
    			 int v = sc.nextInt();
    			 int pu = findPar(u);
    			 int pv = findPar(v);
    			 if(pu != pv) {
    				 if(size[pu]>size[pv]) {
    					 par[pv] = pu;
    					 size[pu] += size[pv];
    				 }
    				 else {
    					 par[pu] = pv;
    					 size[pv] += size[pu];
    				 }
    			 }
    			 else {
    				 l.add(new pair(u,v));
    			 }
    		 }
    		 Set<Integer> s = new HashSet<>();
    		 for(int i=1;i<=n;i++) {
    			 int parent = findPar(i);
    			 s.add(parent);
    		 }
    		 List<Integer> a = new ArrayList<>();
    		 a.addAll(s);
    		 out.write(a.size()-1+"\n");
    		 for(int i=0;i<a.size()-1;i++) {
    			 out.write(l.get(i).a+" "+l.get(i).b+" "+a.get(i)+" "+a.get(i+1)+"\n");
    		 }
		out.close();
    	}
	}
	private static int findPar(int x) {
		if(x == par[x]) return x;
		
		return par[x] = findPar(par[x]);
	}
	static long findl(long[] a, int l, int h, long val, long k) {
		int ans = -1;
		while(l<=h) {
			int mid = (l+h)/2;
			if(a[mid] - val<=k) {
				ans = mid;
				l = mid + 1;
			}
			else h = mid-1;
		}
		return ans==-1?0:ans;
	}
	static long findh(long[] a, int l, int h, long val, long k) {
		int ans = -1;
		while(l<=h) {
			int mid = (l+h)/2;
			if(val - a[mid]<=k) {
				ans = mid;
				h = mid - 1;
			}
			else l = mid+1;
		}
		return ans==-1?0:ans;
	}
	
	private static int ub(List<Long> list, long l) {
		int lo = 0,h = list.size()-1;
		int ans = -1;
		while(lo<=h) {
			int mid = lo+(h-lo)/2;
			if(list.get(mid)<=l) {
				lo = mid+1;
				ans = mid;
			}
			else {
				
				h = mid-1;
			}
		}
		
		return ans+1;
	}
	private static long lb(List<Long> list, long l) {
		int lo = 0,h = list.size()-1;
		int ans = -1;
		while(lo<=h) {
			int mid = lo+(h-lo)/2;
			if(list.get(mid)<=l) {
				if(mid>0 && list.get(mid-1)==l) h = mid - 1;
				else {
					lo = mid+1;
					ans = mid;
				}
			}
			else {
				h = mid-1;
			}
		}
		if(list.get(ans)==l) return ans;
		return ans+1;
	}
	private static void swap(int[] a, int i, int j) {
		int temp = a[i];
		a[i] = a[j];
		a[j] = temp;
	}
	static long lstbt(long val) {
		long msk = val & (val-1);
		return (long) (Math.log(val^msk)/Math.log(2));
	}
	private static long sqrt(long x) {
		long l = 1,h = x;
		long ans = 0;
		while(l<=h) {
			long mid = (l+(h-l)/2);
			if(mid>x/mid) h = mid-1;
			else {
				ans = mid;
				l = mid+1;
			}
		}
		return ans;
	}
	static boolean prime[] = new boolean[10000001];
	static void sieve() {
		prime[0] = true;
		prime[1] = true;
		int max = 10000000;
		for(int i=2;i*i<=max;i++) {
			if(!prime[i]) {
				for(int j=i*i;j<=max;j+=i)
					prime[j] = true;
			}
		}
	}
	static String reverse(String x) {
		StringBuilder input1 = new StringBuilder();
		
        input1.append(x);
        
        input1 = input1.reverse();
        
        return input1.toString();
	}
	static int gcd(int val, int g) {
 
		if(g==0) return val;
		
		return gcd(g,val%g);
	}
	static int lcm(int a,int b) {
		return (a*b)/gcd(a,b);
	}
}
class pair implements Comparable<pair>{
	int a;
	int b;
	pair(int a,int b){
		this.a = a;
		this.b = b;
	}
	@Override
	public int compareTo(pair o) {
		return (int) (this.a - o.a);
	}
}