// Slower C++ solution:
#include <bits/stdc++.h>



using namespace std;



#define pb push_back

#define eb emplace_back

#define ll long long

#define pii pair < int, int >

#define fr first

#define sc second

#define mk make_pair

#define sz(s) (int)s.size()

#define all(s) s.begin(), s.end()

#define ok puts("ok");

#define whatis(x) cerr << #x << " = " << x << endl;

#define pause system("pause");

#define random rand() ^ (rand() << 5)



const int N = (int)1e5 + 7;

const int inf = (int)1e9 + 7;



int n, u, v;

vector < int > gr[N];

int h[N], p[N], is[N], v1;

int cnt = 1;

vector < int > ans, vec[2];



void dfs(int v, int pr = 0) {

	p[v] = pr;

	for (int to : gr[v]) {

		if (to == pr) continue;

		h[to] = h[v] + 1;

		dfs(to, v);

		is[v] = is[to];

	}

}



void no() {

	puts("-1");

	exit(0);

}



void dfs1(int v, int pr = 0) {

	if (is[v]) {

		h[v] = 0;

		int c = 1;

		for (int to : gr[v]) {

			if (to == pr || is[to]) continue;

			ans.pb(cnt + c);

			c++;

		}

		ans.pb(cnt);

		cnt += c;

	} else if (h[v] > 1) {

		no();

	}

	for (int to : gr[v]) {

		if (to == pr) continue;

		h[to] = h[v] + 1;		

		dfs1(to, v);

		

	}

}



main() {

	scanf("%d", &n);

	for (int i = 1; i < n; i++) {

		scanf("%d %d", &u, &v);

		gr[u].pb(v);

		gr[v].pb(u);

	}

	dfs(1);

	int mx = 0;

	int v = -1;

	int v2;

	for (int i = 1; i <= n; i++) {

		if (h[i] > mx) {

			mx = h[i];

			v = i;

		}

	}

	h[v] = 0;

	dfs(v);

	v2 = v;

	v = -1;

	mx = 0;

	for (int i = 1; i <= n; i++) {

		if (h[i] > mx) {

			mx = h[i];

			v = i;

		}

	}

	int v1 = v;

	while (v != 0) {

		is[v] = 1;

		v = p[v];

	}

	dfs1(v1);

	vec[0] = ans;

	cnt = 1;

	ans.clear();

	dfs1(v2);

	vec[1] = ans;

	int fl = 0;

	for (int i = 1; i <= n; i++) {

		if (vec[0][i - 1] == vec[1][i - 1]) continue;		

		if (vec[0][i - 1] > vec[1][i - 1]) {

			fl = 1;

		}

		break;

	}

	for (int to : vec[fl]) {

		printf("%d ", to);

	}

}

// Faster C++ solution for the same problem (measured speedup: 18.20414674498945x):
#include<cstdio>

using namespace std;

#define N 205000

int head[N],cnt,dep[N],l,r,in[N],st[N],n,a,b,ct,st2[N],fg,as1[N],as2[N],is[N];

struct edge{int t,next;}ed[N*2];

void adde(int f,int t){ed[++cnt]=(edge){t,head[f]};head[f]=cnt;ed[++cnt]=(edge){f,head[t]};head[t]=cnt;in[f]++,in[t]++;}

void dfs(int u,int fa){dep[u]=dep[fa]+1;for(int i=head[u];i;i=ed[i].next)if(ed[i].t!=fa)dfs(ed[i].t,u);}

void dfs2(int u,int t,int fa){if(!fg)st[++ct]=u;if(u==t)fg=1;for(int i=head[u];i;i=ed[i].next)if(ed[i].t!=fa)dfs2(ed[i].t,t,u);if(!fg)ct--;}

int main()

{

	scanf("%d",&n);

	for(int i=1;i<n;i++)scanf("%d%d",&a,&b),adde(a,b);

	dfs(1,0);int mx=0,vl;for(int i=1;i<=n;i++)if(dep[i]>mx)mx=dep[i],vl=i;

	dfs(vl,0);mx=0;int vl2=0;for(int i=1;i<=n;i++)if(dep[i]>mx)mx=dep[i],vl2=i;

	dfs2(vl,vl2,0);

	for(int i=1;i<=ct;i++)is[st[i]]=1;

	for(int i=1;i<=n;i++)if(!is[i]&&in[i]>1){printf("-1\n");return 0;}

	for(int i=1;i<=ct;i++)st2[i]=in[st[i]]-2+(in[st[i]]==1);

	int lb=0;

	for(int i=1;i<=ct;i++)

	{

		for(int j=1;j<=st2[i];j++)as1[lb+j]=lb+j+1;

		as1[lb+st2[i]+1]=lb+1;

		lb+=st2[i]+1;

	}

	lb=0;

	for(int i=ct;i>=1;i--)

	{

		for(int j=1;j<=st2[i];j++)as2[lb+j]=lb+j+1;

		as2[lb+st2[i]+1]=lb+1;

		lb+=st2[i]+1;

	}

	int fg2=0;

	for(int i=1;i<=n;i++)if(as1[i]<as2[i]){fg2=1;break;}else if(as2[i]<as1[i])break;

	if(!fg2)for(int i=1;i<=n;i++)as1[i]=as2[i];

	for(int i=1;i<=n;i++)printf("%d ",as1[i]);

}//