#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

typedef int _loop_int;
#define REP(i,n) for(_loop_int i=0;i<(_loop_int)(n);++i)
#define FOR(i,a,b) for(_loop_int i=(_loop_int)(a);i<(_loop_int)(b);++i)
#define FORR(i,a,b) for(_loop_int i=(_loop_int)(b)-1;i>=(_loop_int)(a);--i)

#define DEBUG(x) cout<<#x<<": "<<x<<endl
#define DEBUG_VEC(v) cout<<#v<<":";REP(i,v.size())cout<<" "<<v[i];cout<<endl
#define ALL(a) (a).begin(),(a).end()

#define CHMIN(a,b) a=min((a),(b))
#define CHMAX(a,b) a=max((a),(b))

// mod
const ll MOD = 1000000007ll;
#define FIX(a) ((a)%MOD+MOD)%MOD

// floating
typedef double Real;
const Real EPS = 1e-11;
#define EQ0(x) (abs(x)<EPS)
#define EQ(a,b) (abs(a-b)<EPS)
typedef complex<Real> P;

int n;
vi g[125252];

int p[125252];
int sz[125252];
bool vstd[125252];

int main(){
  scanf("%d",&n);
  REP(i,n-1){
    int s,t;
    scanf("%d%d",&s,&t);
    --s;--t;
    g[s].push_back(t);
    g[t].push_back(s);
  }
  vi roots;
  REP(i,n){
    int cnt = 0;
    for(int x : g[i]){
      if(g[x].size()>=2)cnt++;
    }
    if(cnt>=3){
      puts("-1");return 0;
    }
    sz[i] = cnt;
  }
  REP(i,n){
    if(g[i].size()==1){
      if(sz[g[i][0]]<=1 && !vstd[g[i][0]]){
        vstd[g[i][0]] = true;
        roots.push_back(i);
      }
    }
  }
  if(roots.size()==0){
    puts("-1");return 0;
  }
  vi ans(n,n+1);
  for(int root : roots){
    vector<bool> used(n,false);
    vi p;
    int v = 1;
    int cur = root;
    used[cur]=true;
    while(true){
      int cnt = 0;
      int nxt = -1;
      for(int x : g[cur])if(!used[x]){
        cnt++;
        if(g[x].size()>=2)nxt=x;
      }
      int res = v++;
      REP(_,cnt-1)p.push_back(v++);
      p.push_back(res);
      if(nxt==-1){
        p.push_back(v++);
        break;
      }
      for(int x : g[cur]){
        used[x] = true;
      }
      cur = nxt;
    }
    CHMIN(ans, p);
  }
  REP(i,n)printf("%d%c",ans[i],i==n?'\n':' ');
  return 0;
}
