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.io.*;
import java.util.*;
// import java.nio.charset.StandardCharsets;

// remember to check if n=0, n=1 are special cases 

public class D {
    static Writer wr;

    public static void main(String[] args) throws Exception {
        // String testString = "";
        // InputStream stream = new ByteArrayInputStream(testString.getBytes(StandardCharsets.UTF_8));
        // Reader in = new Reader(stream);
        // long startTime = System.nanoTime();
        // long elapsedTime = System.nanoTime() - startTime;
        // double seconds = (double)elapsedTime / 1000000000.0;
        // System.out.println(seconds);

        wr = new Writer();

        Reader in = new Reader();
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = in.nextInt();

        DisjointSet ds = new DisjointSet(N);

        for(int i=1; i<=N-1; i++) {
            int a = in.nextInt();
            int b = in.nextInt();

            ds.add_pair_and_union(a, b);
        }
        ArrayList<Integer[]> deletion_candidates = ds.deletion_candidates;
        ArrayList<Integer> components = ds.get_components();

        int days = components.size()-1;
        
        out.write(days + "\n");

        for(int i=0;i<days;i++) {
            // wr.writePink(" " + components.get(i));
            out.write(deletion_candidates.get(i)[0] 
                        + " " + deletion_candidates.get(i)[1] 
                        + " " + components.get(i) 
                        + " " + components.get(i+1)
                        + "\n");
        }

        out.flush();
    }
}

class DisjointSet {
    Writer wr;
    int[] parent;
    int[] arr;
    int N, stick1, MAX_N;
    HashMap<Integer, Integer> dict;
    public ArrayList<Integer[]> deletion_candidates;

    public DisjointSet(int _N) {
        wr = new Writer();
        stick1 = 0;
        N = 1000;
        MAX_N = _N;
        parent = new int[N];
        arr = new int[N];
        dict = new HashMap<>();
        Arrays.fill(parent, -1);

        deletion_candidates = new ArrayList<>();
    }

    public int find_representative(int x) {
        if(parent[x]!=x) {
            parent[x] = find_representative(parent[x]);
        }
        return parent[x];
    }

    public int add(int x) {
        if(dict.get(x)==null) {
            arr[stick1] = x;
            dict.put(x, stick1);
            parent[stick1] = stick1;
            stick1++;
            return stick1-1;
        }
        return dict.get(x);
    }

    public void add_pair_and_union(int x, int y) {
        int pos_x = add(x);
        int pos_y = add(y);

        int rep_x = find_representative(pos_x);
        int rep_y = find_representative(pos_y);

        if(rep_x != rep_y) {
            parent[rep_y] = rep_x; //union
        }
        else {
            //candidate for deletion
            deletion_candidates.add(new Integer[]{x, y});
            // wr.writeRed(Arrays.toString(new Integer[]{x, y}));
        }

        // wr.writeBlue(Arrays.toString(Arrays.copyOfRange(parent, 0, 4)));
    }

    public ArrayList<Integer> get_components() {
        ArrayList<Integer> ans = new ArrayList<>();
        // System.out.println(MAX_N);
        for(int i=1; i<=MAX_N;i++) {

            if(dict.get(i)==null) {
                // System.out.println("->"+i);
                ans.add(i);
            }
            else {
                // System.out.println(i);
                int pos_i = dict.get(i);
                if(parent[pos_i]==pos_i) {
                    ans.add(i);
                }    
            }
            
            
        }
        return ans;
    }

}

class Writer {
    public void writeRed(String x) {
        System.out.println((char)27 + "[31m" + (char)27 + "[40m" + x + (char)27 + "[0m");
    }
    public void writeBlue(String x) {
        System.out.println((char)27 + "[34m" + (char)27 + "[3m" + x + (char)27 + "[0m");
    }
    public void writeGreen(String x) {
        System.out.println((char)27 + "[32m" + (char)27 + "[3m" + x + (char)27 + "[0m");
    }
    public void writePink(String x) {
        System.out.println((char)27 + "[30m" + (char)27 + "[45m" + x + (char)27 + "[0m");
    }
}

class Reader {
    final private int BUFFER_SIZE = 1 << 16;private DataInputStream din;private byte[] buffer;private int bufferPointer, bytesRead;
    public Reader(){din=new DataInputStream(System.in);buffer=new byte[BUFFER_SIZE];bufferPointer=bytesRead=0;}
    public Reader(InputStream stream){din=new DataInputStream(stream);buffer=new byte[BUFFER_SIZE];bufferPointer=bytesRead=0;}
    public String readLine()throws IOException{byte[] buf=new byte[1024];int cnt=0,c;
        while((c=read())!=-1){if(c=='\n')break;buf[cnt++]=(byte)c;}return new String(buf,0,cnt);}
    public char nextChar()throws IOException{byte c=read();while(c<=' ')c=read();return (char)c;}
    public int nextInt()throws IOException{int ret=0;byte c=read();while(c<=' ')c=read();boolean neg=(c=='-');
        if(neg)c=read();do{ret=ret*10+c-'0';}while((c=read())>='0'&&c<='9');if(neg)return -ret;return ret;} 
    public long nextLong()throws IOException{long ret=0;byte c=read();while(c<=' ')c=read();boolean neg=(c=='-');
        if(neg)c=read();do{ret=ret*10+c-'0';}while((c=read())>='0'&&c<='9');if(neg)return -ret;return ret;}
    public double nextDouble()throws IOException{double ret=0,div=1;byte c=read();while(c<=' ')c=read();boolean neg=(c=='-');if(neg)c = read();do {ret=ret*10+c-'0';}while((c=read())>='0'&&c<='9');
        if(c=='.')while((c=read())>='0'&&c<='9')ret+=(c-'0')/(div*=10);if(neg)return -ret;return ret;}
    private void fillBuffer()throws IOException{bytesRead=din.read(buffer,bufferPointer=0,BUFFER_SIZE);if(bytesRead==-1)buffer[0]=-1;}
    private byte read()throws IOException{if(bufferPointer==bytesRead)fillBuffer();return buffer[bufferPointer++];}
    public void close()throws IOException{if(din==null) return;din.close();}
}
