题目链接:https://codeforces.com/contest/25/problem/D
#include <iostream>
#include <vector>
using namespace std;
static const int MAXN=1000+10;
int p[MAXN];
struct Edge{
int u,v;
}same[MAXN];
int n,idx;
vector<int> root;
void init() { for(int i=1;i<=n;i++) p[i]=i; }
int find(int x) {
if(x!=p[x]) p[x]=find(p[x]);
return p[x];
}
int main()
{
scanf("%d",&n);
init();
for(int i=1;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
if(find(u)==find(v)) same[++idx]={u,v};
else p[find(v)]=find(u);
}
for(int i=1;i<=n;i++) if(p[i]==i) root.push_back(i);
printf("%d\n",idx);
for(int i=1;i<=idx;i++)
printf("%d %d %d %d\n",same[i].u,same[i].v,root[0],root[i]);
return 0;
}