import java.io.*; import java.util.*;
public class DsuGraph {
public static void main(String args[]){
InputReader in = new InputReader();
PrintWriter out = new PrintWriter(System.out);
Task solver = new Task();
solver.solve(1, in, out);
out.close();
}
static int mod = (int)1e9+7;
static class Task{
static class Subset{
int parent, size;
}
static class Pair{
int x, y;
public Pair(int x, int y){this.x=x; this.y = y;}
}
public void solve(int T, InputReader in, PrintWriter out) {
int N = in.nextInt();
adj = new ArrayList[N];
subset = new Subset[N];
for (int i = 0 ; i< N; i++){
adj[i] = new ArrayList<>();
}
for (int i = 0; i < N; i++){
subset[i] = new Subset();
subset[i].parent = i;
subset[i].size = 1;
}
List<Pair> list = new ArrayList<>();
int M = N-1;
while (M-- > 0){
int x = in.nextInt()-1;
int y = in.nextInt()-1;
if(union(x, y)){
}else{
list.add(new Pair(x, y));
}
}
TreeSet<Integer> set = new TreeSet<>();
for (int i = 0 ;i < N; i++){
if (!set.contains(root(i))){
set.add(root(i));
}
}
out.println(set.size()-1);
int p = set.pollFirst();
for (int i = 0 ; i< list.size(); i++){
int x = set.pollFirst();
out.println((list.get(i).x+1) + " " + (list.get(i).y+1) + " " + (p+1) + " " + (x+1) );
}
}
private boolean union(int u, int v) {
int r1 = root(u);
int r2 = root(v);
if (r1 == r2)
return false;
if (r1 != r2){
if (subset[r1].size > subset[r2].size){
subset[r2].parent = r1;
subset[r1].size += subset[r2].size;
}else{
subset[r1].parent = r2;
subset[r2].size += subset[r1].size;
}
}
return true;
}
private int root(int v) {
if (subset[v].parent != v)
subset[v].parent = root(subset[v].parent);
return subset[v].parent;
}
static boolean visited[];
static int parent[];
static List<Integer> adj[];
static Subset subset[];
}
static class InputReader {
BufferedReader br;
StringTokenizer st;
public InputReader() {
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;
}
}}




