mod= 10 **9 +7
#import resource
#resource.setrlimit(resource.RLIMIT_STACK, [0x100000000, resource.RLIM_INFINITY])
import threading
threading .stack_size ( 2 **28 )
import sys
sys .setrecursionlimit ( 10 **7 )
#fact=[1]
#for i in range(1,10001):
# fact.append((fact[-1]*i)%mod)
#ifact=[0]*10001
#ifact[10000]=pow(fact[10000],mod-2,mod)
#for i in range(10000,0,-1):
# ifact[i-1]=(i*ifact[i])%mod
from sys import stdin, stdout
import bisect
from bisect import bisect_left as bl #c++ lowerbound bl(array,element)
from bisect import bisect_right as br #c++ upperbound
import itertools
import collections
import math
import heapq
from random import randint as rn
#from Queue import Queue as Q
def modinv( n, p) :
return pow ( n, p-2 , p)
def ncr( n, r, p) : #for using this uncomment the lines calculating fact and ifact
t= ( ( fact[ n] ) *( ( ifact[ r] *ifact[ n-r] ) %p) ) %p
return t
def ain( ) : #takes array as input
return list ( map ( int , sin( ) .split ( ) ) )
def sin( ) :
return input ( ) .strip ( )
def GCD( x, y) :
while ( y) :
x, y = y, x % y
return x
"""*******************************************************"""
def main( ) :
def dfs( x) :
p[ x] = 1
t= 0
for i in b[ x] :
if ( p[ i] != 1 ) :
r= dfs( i)
if ( r== 1 ) :
t= 1
if ( t== 0 ) :
if ( ( x== 1 and len ( b[ x] ) > 1 ) or ( x!= 1 and len ( b[ x] ) > 2 ) ) :
ans[ 0 ] += 1
return 1
else :
return -1
else :
return 1
n= int ( sin( ) )
b= [ [ ] for i in range ( n+1 ) ]
for i in range ( n-1 ) :
x, y= ain( )
b[ x] .append ( y)
b[ y] .append ( x)
k= 0
for i in range ( 2 , n+1 ) :
if ( len ( b[ i] ) == 1 ) :
k+= 1
ans= [ 0 ]
p= [ 0 ] *( n+1 )
dfs( 1 )
k-= ans[ 0 ]
print k
######## Python 2 and 3 footer by Pajenegod and c1729
py2 = round ( 0.5 )
if py2:
from future_builtins import ascii, filter , hex , map , oct , zip
range = xrange
import os , sys
from io import IOBase, BytesIO
BUFSIZE = 8192
class FastIO( BytesIO) :
newlines = 0
def __init__ ( self , file ) :
self ._file = file
self ._fd = file .fileno ( )
self .writable = "x" in file .mode or "w" in file .mode
self .write = super ( FastIO, self ) .write if self .writable else None
def _fill( self ) :
s = os .read ( self ._fd, max ( os .fstat ( self ._fd) .st_size , BUFSIZE) )
self .seek ( ( self .tell ( ) , self .seek ( 0 , 2 ) , super ( FastIO, self ) .write ( s) ) [ 0 ] )
return s
def read( self ) :
while self ._fill( ) : pass
return super ( FastIO, self ) .read ( )
def readline ( self ) :
while self .newlines == 0 :
s = self ._fill( ) ; self .newlines = s.count ( b"\n " ) + ( not s)
self .newlines -= 1
return super ( FastIO, self ) .readline ( )
def flush( self ) :
if self .writable :
os .write ( self ._fd, self .getvalue ( ) )
self .truncate ( 0 ) , self .seek ( 0 )
class IOWrapper( IOBase) :
def __init__ ( self , file ) :
self .buffer = FastIO( file )
self .flush = self .buffer .flush
self .writable = self .buffer .writable
if py2:
self .write = self .buffer .write
self .read = self .buffer .read
self .readline = self .buffer .readline
else :
self .write = lambda s:self .buffer .write ( s.encode ( 'ascii' ) )
self .read = lambda :self .buffer .read ( ) .decode ( 'ascii' )
self .readline = lambda :self .buffer .readline ( ) .decode ( 'ascii' )
sys .stdin , sys .stdout = IOWrapper( sys .stdin ) , IOWrapper( sys .stdout )
input = lambda : sys .stdin .readline ( ) .rstrip ( '\r \n ' )
#if __name__ == '__main__':
# main()
threading .Thread ( target= main) .start ( )
bW9kPTEwKio5KzcKI2ltcG9ydCByZXNvdXJjZQojcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9TVEFDSywgWzB4MTAwMDAwMDAwLCByZXNvdXJjZS5STElNX0lORklOSVRZXSkKaW1wb3J0IHRocmVhZGluZwp0aHJlYWRpbmcuc3RhY2tfc2l6ZSgyKioyOCkKaW1wb3J0IHN5cwpzeXMuc2V0cmVjdXJzaW9ubGltaXQoMTAqKjcpCiNmYWN0PVsxXQojZm9yIGkgaW4gcmFuZ2UoMSwxMDAwMSk6CiMgICAgZmFjdC5hcHBlbmQoKGZhY3RbLTFdKmkpJW1vZCkKI2lmYWN0PVswXSoxMDAwMQojaWZhY3RbMTAwMDBdPXBvdyhmYWN0WzEwMDAwXSxtb2QtMixtb2QpCiNmb3IgaSBpbiByYW5nZSgxMDAwMCwwLC0xKToKIyAgICBpZmFjdFtpLTFdPShpKmlmYWN0W2ldKSVtb2QKZnJvbSBzeXMgaW1wb3J0IHN0ZGluLCBzdGRvdXQKaW1wb3J0IGJpc2VjdApmcm9tIGJpc2VjdCBpbXBvcnQgYmlzZWN0X2xlZnQgYXMgYmwgICAgICAgICAgICAgICNjKysgbG93ZXJib3VuZCBibChhcnJheSxlbGVtZW50KQpmcm9tIGJpc2VjdCBpbXBvcnQgYmlzZWN0X3JpZ2h0IGFzIGJyICAgICAgICAgICAgICNjKysgdXBwZXJib3VuZAppbXBvcnQgaXRlcnRvb2xzCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgbWF0aAppbXBvcnQgaGVhcHEKZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQgYXMgcm4KI2Zyb20gUXVldWUgaW1wb3J0IFF1ZXVlIGFzIFEKZGVmIG1vZGludihuLHApOgogICAgcmV0dXJuIHBvdyhuLHAtMixwKQpkZWYgbmNyKG4scixwKTogICAgICAgICAgICAgICAgICAgICAgICAjZm9yIHVzaW5nIHRoaXMgdW5jb21tZW50IHRoZSBsaW5lcyBjYWxjdWxhdGluZyBmYWN0IGFuZCBpZmFjdAogICAgdD0oKGZhY3Rbbl0pKigoaWZhY3Rbcl0qaWZhY3Rbbi1yXSklcCkpJXAKICAgIHJldHVybiB0CmRlZiBhaW4oKTogICAgICAgICAgICAgICAgICAgICAgICAgICAjdGFrZXMgYXJyYXkgYXMgaW5wdXQKICAgIHJldHVybiBsaXN0KG1hcChpbnQsc2luKCkuc3BsaXQoKSkpCmRlZiBzaW4oKToKICAgIHJldHVybiBpbnB1dCgpLnN0cmlwKCkKZGVmIEdDRCh4LHkpOgogICAgd2hpbGUoeSk6CiAgICAgICAgeCwgeSA9IHksIHggJSB5CiAgICByZXR1cm4geAoiIiIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIiIiCmRlZiBtYWluKCk6CiAgICBkZWYgZGZzKHgpOgogICAgICAgIHBbeF09MQogICAgICAgIHQ9MAogICAgICAgIGZvciBpIGluIGJbeF06CiAgICAgICAgICAgIGlmKHBbaV0hPTEpOgogICAgICAgICAgICAgICAgcj1kZnMoaSkKICAgICAgICAgICAgICAgIGlmKHI9PTEpOgogICAgICAgICAgICAgICAgICAgIHQ9MQogICAgICAgIGlmKHQ9PTApOgogICAgICAgICAgICBpZigoeD09MSBhbmQgbGVuKGJbeF0pPjEpIG9yICh4IT0xIGFuZCBsZW4oYlt4XSk+MikpOgogICAgICAgICAgICAgICAgYW5zWzBdKz0xCiAgICAgICAgICAgICAgICByZXR1cm4gMQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmV0dXJuIC0xCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIDEKICAgIG49aW50KHNpbigpKQogICAgYj1bW10gZm9yIGkgaW4gcmFuZ2UobisxKV0KICAgIGZvciBpIGluIHJhbmdlKG4tMSk6CiAgICAgICAgeCx5PWFpbigpCiAgICAgICAgYlt4XS5hcHBlbmQoeSkKICAgICAgICBiW3ldLmFwcGVuZCh4KQogICAgaz0wCiAgICBmb3IgaSBpbiByYW5nZSgyLG4rMSk6CiAgICAgICAgaWYobGVuKGJbaV0pPT0xKToKICAgICAgICAgICAgays9MQogICAgYW5zPVswXQogICAgcD1bMF0qKG4rMSkKICAgIGRmcygxKQogICAgay09YW5zWzBdCiAgICBwcmludCBrCiMjIyMjIyMjIFB5dGhvbiAyIGFuZCAzIGZvb3RlciBieSBQYWplbmVnb2QgYW5kIGMxNzI5CnB5MiA9IHJvdW5kKDAuNSkKaWYgcHkyOgogICAgZnJvbSBmdXR1cmVfYnVpbHRpbnMgaW1wb3J0IGFzY2lpLCBmaWx0ZXIsIGhleCwgbWFwLCBvY3QsIHppcAogICAgcmFuZ2UgPSB4cmFuZ2UKIAppbXBvcnQgb3MsIHN5cwpmcm9tIGlvIGltcG9ydCBJT0Jhc2UsIEJ5dGVzSU8KIApCVUZTSVpFID0gODE5MgpjbGFzcyBGYXN0SU8oQnl0ZXNJTyk6CiAgICBuZXdsaW5lcyA9IDAKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlKToKICAgICAgICBzZWxmLl9maWxlID0gZmlsZQogICAgICAgIHNlbGYuX2ZkID0gZmlsZS5maWxlbm8oKQogICAgICAgIHNlbGYud3JpdGFibGUgPSAieCIgaW4gZmlsZS5tb2RlIG9yICJ3IiBpbiBmaWxlLm1vZGUKICAgICAgICBzZWxmLndyaXRlID0gc3VwZXIoRmFzdElPLCBzZWxmKS53cml0ZSBpZiBzZWxmLndyaXRhYmxlIGVsc2UgTm9uZQogCiAgICBkZWYgX2ZpbGwoc2VsZik6CiAgICAgICAgcyA9IG9zLnJlYWQoc2VsZi5fZmQsIG1heChvcy5mc3RhdChzZWxmLl9mZCkuc3Rfc2l6ZSwgQlVGU0laRSkpCiAgICAgICAgc2VsZi5zZWVrKChzZWxmLnRlbGwoKSwgc2VsZi5zZWVrKDAsMiksIHN1cGVyKEZhc3RJTywgc2VsZikud3JpdGUocykpWzBdKQogICAgICAgIHJldHVybiBzCiAgICBkZWYgcmVhZChzZWxmKToKICAgICAgICB3aGlsZSBzZWxmLl9maWxsKCk6IHBhc3MKICAgICAgICByZXR1cm4gc3VwZXIoRmFzdElPLHNlbGYpLnJlYWQoKQogCiAgICBkZWYgcmVhZGxpbmUoc2VsZik6CiAgICAgICAgd2hpbGUgc2VsZi5uZXdsaW5lcyA9PSAwOgogICAgICAgICAgICBzID0gc2VsZi5fZmlsbCgpOyBzZWxmLm5ld2xpbmVzID0gcy5jb3VudChiIlxuIikgKyAobm90IHMpCiAgICAgICAgc2VsZi5uZXdsaW5lcyAtPSAxCiAgICAgICAgcmV0dXJuIHN1cGVyKEZhc3RJTywgc2VsZikucmVhZGxpbmUoKQogCiAgICBkZWYgZmx1c2goc2VsZik6CiAgICAgICAgaWYgc2VsZi53cml0YWJsZToKICAgICAgICAgICAgb3Mud3JpdGUoc2VsZi5fZmQsIHNlbGYuZ2V0dmFsdWUoKSkKICAgICAgICAgICAgc2VsZi50cnVuY2F0ZSgwKSwgc2VsZi5zZWVrKDApCiAKY2xhc3MgSU9XcmFwcGVyKElPQmFzZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSk6CiAgICAgICAgc2VsZi5idWZmZXIgPSBGYXN0SU8oZmlsZSkKICAgICAgICBzZWxmLmZsdXNoID0gc2VsZi5idWZmZXIuZmx1c2gKICAgICAgICBzZWxmLndyaXRhYmxlID0gc2VsZi5idWZmZXIud3JpdGFibGUKICAgICAgICBpZiBweTI6CiAgICAgICAgICAgIHNlbGYud3JpdGUgPSBzZWxmLmJ1ZmZlci53cml0ZQogICAgICAgICAgICBzZWxmLnJlYWQgPSBzZWxmLmJ1ZmZlci5yZWFkCiAgICAgICAgICAgIHNlbGYucmVhZGxpbmUgPSBzZWxmLmJ1ZmZlci5yZWFkbGluZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYud3JpdGUgPSBsYW1iZGEgczpzZWxmLmJ1ZmZlci53cml0ZShzLmVuY29kZSgnYXNjaWknKSkKICAgICAgICAgICAgc2VsZi5yZWFkID0gbGFtYmRhOnNlbGYuYnVmZmVyLnJlYWQoKS5kZWNvZGUoJ2FzY2lpJykKICAgICAgICAgICAgc2VsZi5yZWFkbGluZSA9IGxhbWJkYTpzZWxmLmJ1ZmZlci5yZWFkbGluZSgpLmRlY29kZSgnYXNjaWknKQogCnN5cy5zdGRpbiwgc3lzLnN0ZG91dCA9IElPV3JhcHBlcihzeXMuc3RkaW4pLCBJT1dyYXBwZXIoc3lzLnN0ZG91dCkKaW5wdXQgPSBsYW1iZGE6IHN5cy5zdGRpbi5yZWFkbGluZSgpLnJzdHJpcCgnXHJcbicpCiAKI2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiMgICBtYWluKCkKdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bWFpbikuc3RhcnQoKQ==