← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(reader, &n)

	adj := make([][]int, n+1)
	for i := 0; i < n-1; i++ {
		var u, v int
		fmt.Fscan(reader, &u, &v)
		adj[u] = append(adj[u], v)
		adj[v] = append(adj[v], u)
	}

	if n == 2 {
		fmt.Println(1)
		return
	}

	up := make([]int, n+1)
	down := make([]int, n+1)
	parent := make([]int, n+1)
	freq := make([]int, n+2)
	keys := make([]int, 0, n+2)

	var dfs1 func(int, int)
	dfs1 = func(u, p int) {
		parent[u] = p
		for _, v := range adj[u] {
			if v != p {
				dfs1(v, u)
			}
		}

		c_minus1 := 0
		start := len(keys)

		for _, v := range adj[u] {
			if v != p {
				x := up[v]
				if x == -1 {
					c_minus1++
				} else {
					if freq[x] == 0 {
						keys = append(keys, x)
					}
					freq[x]++
				}
			}
		}

		unique_len := len(keys) - start
		if c_minus1 > 0 {
			up[u] = -1
		} else if unique_len > 1 {
			up[u] = -1
		} else if unique_len == 1 {
			up[u] = keys[start] + 1
		} else {
			up[u] = 1
		}

		for _, k := range keys[start:] {
			freq[k] = 0
		}
		keys = keys[:start]
	}

	dfs1(1, 0)

	var dfs2 func(int, int)
	dfs2 = func(u, p int) {
		c_minus1 := 0
		start := len(keys)

		add := func(x int) {
			if x == -1 {
				c_minus1++
			} else {
				if freq[x] == 0 {
					keys = append(keys, x)
				}
				freq[x]++
			}
		}

		if p != 0 {
			add(down[u])
		}
		for _, v := range adj[u] {
			if v != p {
				add(up[v])
			}
		}

		for _, v := range adj[u] {
			if v == p {
				continue
			}

			y := up[v]
			rem_minus1 := c_minus1
			if y == -1 {
				rem_minus1--
			}

			if rem_minus1 > 0 {
				down[v] = -1
				continue
			}

			rem_unique := len(keys) - start
			if y != -1 && freq[y] == 1 {
				rem_unique--
			}

			if rem_unique > 1 {
				down[v] = -1
			} else if rem_unique == 1 {
				rem_val := keys[start]
				if rem_val == y && freq[y] == 1 {
					rem_val = keys[start+1]
				}
				down[v] = rem_val + 1
			} else {
				down[v] = 1
			}
		}

		for _, k := range keys[start:] {
			freq[k] = 0
		}
		keys = keys[:start]

		for _, v := range adj[u] {
			if v != p {
				dfs2(v, u)
			}
		}
	}

	dfs2(1, 0)

	min_ans := int(1e9)

	for i := 1; i <= n; i++ {
		c_minus1 := 0
		start := len(keys)

		add := func(x int) {
			if x == -1 {
				c_minus1++
			} else {
				if freq[x] == 0 {
					keys = append(keys, x)
				}
				freq[x]++
			}
		}

		if i != 1 {
			add(down[i])
		}
		for _, v := range adj[i] {
			if v != parent[i] {
				add(up[v])
			}
		}

		unique_len := len(keys) - start
		if c_minus1 == 0 && unique_len <= 2 {
			L_sum := 0
			for _, val := range keys[start:] {
				L_sum += val
			}
			ans := L_sum
			for ans%2 == 0 {
				ans /= 2
			}
			if ans < min_ans {
				min_ans = ans
			}
		}

		for _, k := range keys[start:] {
			freq[k] = 0
		}
		keys = keys[:start]
	}

	if min_ans == int(1e9) {
		fmt.Println(-1)
	} else {
		fmt.Println(min_ans)
	}
}