vector+vector+queue
#include <iostream>
#include <set>
#include <vector>
#include <queue>
#include<algorithm>
using namespace std;
typedef vector<int> se;
typedef vector<se> vec;
int maxn;
//带括号的考虑递归输入处理
void solve(vec& v,int p=0){
int x;
cin>>ws>>x;
if(x>maxn) maxn=x;
if(p){
v[x].push_back(p);
v[p].push_back(x);
}
while(1){
char ch;
cin>>ws>>ch;
if(ch==')') break;
solve(v,x);
}
}
int main()
{
char ch;
while(cin>>ws>>ch){
vec v(60,se());
maxn=0;
solve(v);
// cout<<maxn<<endl;
priority_queue<int,vector<int>,greater<int> > q;
for(int i=1;i<=maxn;i++){
if(v[i].size()==1) q.push(i);
}
for(int i=1;i<maxn;i++){
int x=q.top();
q.pop();
int p=v[x][0];
if(i!=1) cout<<" ";
cout<<p;
v[p].erase(remove(v[p].begin(),v[p].end(),x),v[p].end());
if(v[p].size()==1) q.push(p);
}
cout<<endl;
}
return 0;
}
vector+set+queue
#include <iostream>
#include <set>
#include <vector>
#include <queue>
using namespace std;
typedef set<int> se;
typedef vector<se> vec;
int maxn;
//带括号的考虑递归输入处理
void solve(vec& v,int p=0){
int x;
cin>>ws>>x;
if(x>maxn) maxn=x;
if(p){
v[x].insert(p);
v[p].insert(x);
}
while(1){
char ch;
cin>>ws>>ch;
if(ch==')') break;
solve(v,x);
}
}
int main()
{
char ch;
while(cin>>ws>>ch){
vec v(60,se());
maxn=0;
solve(v);
// cout<<maxn<<endl;
priority_queue<int,vector<int>,greater<int> > q;
for(int i=1;i<=maxn;i++){
if(v[i].size()==1) q.push(i);
}
for(int i=1;i<maxn;i++){
int x=q.top();
q.pop();
int p=*(v[x].begin());
if(i!=1) cout<<" ";
cout<<p;
v[p].erase(x);
if(v[p].size()==1) q.push(p);
}
cout<<endl;
}
return 0;
}