#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> P;
#define N 100010
ll n;
vector<ll> g[N];
class Dist{
  public:
  ll d[N];
  void dfs(ll x,ll from,ll dep){
    d[x]=dep;
    for(auto y:g[x])if(y!=from){
      dfs(y,x,dep+1);
    }
  }
  ll main(ll s){
    dfs(s,0,0);
    ll ma=0,pnt=0;
    for(int i=1;i<=n;i++){
      if(d[i]>ma)ma=d[i],pnt=i;
    }
    return pnt;
  }
};
vector<ll> path;
bool dfs(ll x,ll from,ll p){
  path.push_back(x);
  if(x==p)return 1;
  for(auto y:g[x])if(y!=from){
    if(dfs(y,x,p))return 1;
  }
  path.pop_back();
  return 0;
}

ll ans[N];
void solve(){
    ans[1]=1; ll t=1;
    for(int i=1;i<path.size()-1;i++){
      ll k=g[path[i]].size()-2;
      ans[t+k+1]=t+1;
      for(int j=1;j<=k;j++)ans[t+j]=t+1+j;
      t+=k+1;
    }
    ans[n]=n;
}
ll res[N];
int main(){
    cin>>n;
    for(int i=0;i<n-1;i++){
      ll a,b;cin>>a>>b;
      g[a].push_back(b);
      g[b].push_back(a);
    }
    Dist A,B;
    ll a=A.main(1);
    ll b=B.main(a);
    dfs(a,0,b);
    ll sum=path.size();
    for(int i=1;i<path.size()-1;i++){
      sum+=g[path[i]].size()-2;
    }
    
    if(sum!=n){
      cout<<-1<<endl;
      return 0;
    }
    solve(); for(int i=1;i<=n;i++)res[i]=ans[i];
    reverse(path.begin(),path.end());
    solve();
    //for(int i=1;i<=n;i++)cout<<res[i]<<" ";cout<<endl;
    //for(int i=1;i<=n;i++)cout<<ans[i]<<" ";cout<<endl;
    bool smaller=0;
    for(int i=1;i<=n;i++){
      if(res[i]<ans[i]){smaller=1;break;}
      if(res[i]>ans[i])break;
    }
    if(smaller)for(int i=1;i<=n;i++)ans[i]=res[i];
    for(int i=1;i<=n;i++){
      if(i>1)cout<<" ";
      cout<<ans[i];
    }cout<<endl;
    return 0;
}

