//poj 1848
//sep9
include <iostream>
#include <vector>
using namespace std;
const int MAXN=128;
const int INF=100000;
vector<int> g[2*MAXN];
int dp[MAXN][3];
void dfs(int u,int p)
{
vector<int> son;
int sum=0;
for(int i=0;i<g[u].size();++i){
int v=g[u][i];
if(v!=p){
dfs(v,u);
son.push_back(v);
sum+=dp[v][0];
}
}
if(son.size()==0){
dp[u][1]=0;
dp[u][0]=dp[u][2]=INF;
return ;
}
dp[u][1]=min(INF,sum);
dp[u][2]=dp[u][0]=INF;
for(int i=0;i<son.size();++i){
int v=son[i];
dp[u][2]=min(dp[u][2],sum-dp[v][0]+min(dp[v][1],dp[v][2]));
dp[u][0]=min(dp[u][0],sum-dp[v][0]+dp[v][2]+1);
}
for(int i=0;i<son.size();++i){
int v=son[i];
for(int j=0;j<son.size();++j){
if(i==j) continue;
int k=son[j];
dp[u][0]=min(dp[u][0],sum-dp[v][0]-dp[k][0]+min(dp[v][1],dp[v][2])+min(dp[k][1],dp[k][2])+1);
}
}
}
int main()
{
int n,a,b;
scanf("%d",&n);
for(int i=1;i<n;++i){
scanf("%d%d",&a,&b);
g[a].push_back(b);
g[b].push_back(a);
}
dfs(1,-1);
if(dp[1][0]==INF)
printf("-1");
else
printf("%d",dp[1][0]);
return 0;
}