#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define endl '\n'
#define lb long double
#define vi std::vector<int>
#define isz(v) (int) v.size()
#define pii std::pair<int, int>
#define all(v) v.begin(), v.end()
#define vii vector<pair<int, int>>
#define loop cerr << "here" << endl;
#define TIME 1.0 * clock() / CLOCKS_PER_SEC
using namespace std;
typedef long long ll;
const int MAXN = 2e5 + 7;
const int inf32 = 1e15;
template <typename T> void maximize(T &a, T b){if(a < b) a = b;}
template <typename T> void minimize(T &a, T b){if(a > b) a = b;}
stack<int> st;
int dfstimer, id[MAXN], low[MAXN], n, sccCnt, scc[MAXN], sz[MAXN];
vi a[MAXN];
bool articulation_point[MAXN];
vii edge;
void dfsTarjan(int u, int p){
id[u] = low[u] = ++dfstimer;
st.push(u);
int cnt = (u != 1);
for(auto v : a[u]){
if(v == p) continue;
if(id[v]){
minimize(low[u], id[v]);
}
else{
dfsTarjan(v, u);
minimize(low[u], low[v]);
if(low[v] >= id[u]) cnt++;
}
}
if(low[u] == id[u]){
int v;
sccCnt++;
do{
sz[sccCnt]++;
v = st.top();
st.pop();
scc[v] = sccCnt;
}while(v != u);
}
}
bool check(int u, int v){
if(sz[scc[u]] > 1){
if(scc[u] == scc[v] and (isz(a[u]) > 2 or isz(a[v]) > 2)){
return 1;
}
else if(scc[u] != scc[v] and (isz(a[u]) > 3 or isz(a[v]) > 1)){
return 1;
}
return 0;
}
if(isz(a[u]) == 1){
if(sz[scc[v]] > 1 and isz(a[v]) > 3) return 1;
else if(sz[scc[v]] == 1 and isz(a[v]) > 2) return 1;
}
else{
return isz(a[u]) > 1 and isz(a[v]) > 1 ;
}
return 0;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
#define task "bai3"
if (fopen(task".inp", "r")){
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
cin >> n;
for(int i = 1; i <= n; i++){
int x, y;
cin >> x >> y;
a[x].push_back(y);
a[y].push_back(x);
edge.push_back({x, y});
}
dfsTarjan(1, -1);
int ans = 0;
for(auto i : edge){
int u = i.fi, v = i.se;
ans += check(u, v) | check(v, u);
}
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwoKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIGxiIGxvbmcgZG91YmxlCgojZGVmaW5lIHZpIHN0ZDo6dmVjdG9yPGludD4KI2RlZmluZSBpc3oodikgKGludCkgdi5zaXplKCkKI2RlZmluZSBwaWkgc3RkOjpwYWlyPGludCwgaW50PgojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksIHYuZW5kKCkKI2RlZmluZSB2aWkgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PgoKI2RlZmluZSBsb29wIGNlcnIgPDwgImhlcmUiIDw8IGVuZGw7CiNkZWZpbmUgVElNRSAxLjAgKiBjbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKY29uc3QgaW50IE1BWE4gPSAyZTUgKyA3Owpjb25zdCBpbnQgaW5mMzIgPSAxZTE1OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgbWF4aW1pemUoVCAmYSwgVCBiKXtpZihhIDwgYikgYSA9IGI7fQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBtaW5pbWl6ZShUICZhLCBUIGIpe2lmKGEgPiBiKSBhID0gYjt9CgpzdGFjazxpbnQ+IHN0OwppbnQgZGZzdGltZXIsIGlkW01BWE5dLCBsb3dbTUFYTl0sIG4sIHNjY0NudCwgc2NjW01BWE5dLCBzeltNQVhOXTsKdmkgYVtNQVhOXTsKYm9vbCBhcnRpY3VsYXRpb25fcG9pbnRbTUFYTl07CnZpaSBlZGdlOwoKdm9pZCBkZnNUYXJqYW4oaW50IHUsIGludCBwKXsKICAgIGlkW3VdID0gbG93W3VdID0gKytkZnN0aW1lcjsKICAgIHN0LnB1c2godSk7CiAgICBpbnQgY250ID0gKHUgIT0gMSk7CgogICAgZm9yKGF1dG8gdiA6IGFbdV0pewogICAgICAgIGlmKHYgPT0gcCkgY29udGludWU7CiAgICAgICAgaWYoaWRbdl0pewogICAgICAgICAgICBtaW5pbWl6ZShsb3dbdV0sIGlkW3ZdKTsKICAgICAgICB9CgogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGRmc1Rhcmphbih2LCB1KTsKICAgICAgICAgICAgbWluaW1pemUobG93W3VdLCBsb3dbdl0pOwogICAgICAgICAgICBpZihsb3dbdl0gPj0gaWRbdV0pIGNudCsrOwogICAgICAgIH0KCiAgICB9CgoKICAgIGlmKGxvd1t1XSA9PSBpZFt1XSl7CiAgICAgICAgaW50IHY7CiAgICAgICAgc2NjQ250Kys7CgogICAgICAgIGRvewogICAgICAgICAgICBzeltzY2NDbnRdKys7CiAgICAgICAgICAgIHYgPSBzdC50b3AoKTsKICAgICAgICAgICAgc3QucG9wKCk7CiAgICAgICAgICAgIHNjY1t2XSA9IHNjY0NudDsKCiAgICAgICAgfXdoaWxlKHYgIT0gdSk7CiAgICB9Cgp9Cgpib29sIGNoZWNrKGludCB1LCBpbnQgdil7CiAgICBpZihzeltzY2NbdV1dID4gMSl7CiAgICAgICAgaWYoc2NjW3VdID09IHNjY1t2XSBhbmQgKGlzeihhW3VdKSA+IDIgb3IgaXN6KGFbdl0pID4gMikpewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihzY2NbdV0gIT0gc2NjW3ZdIGFuZCAoaXN6KGFbdV0pID4gMyBvciBpc3ooYVt2XSkgPiAxKSl7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZihpc3ooYVt1XSkgPT0gMSl7CiAgICAgICAgaWYoc3pbc2NjW3ZdXSA+IDEgYW5kIGlzeihhW3ZdKSA+IDMpIHJldHVybiAxOwogICAgICAgIGVsc2UgaWYoc3pbc2NjW3ZdXSA9PSAxIGFuZCBpc3ooYVt2XSkgPiAyKSByZXR1cm4gMTsKICAgIH0KICAgIGVsc2V7CiAgICAgICAgcmV0dXJuIGlzeihhW3VdKSA+IDEgYW5kIGlzeihhW3ZdKSA+IDEgOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCnNpZ25lZCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgI2RlZmluZSB0YXNrICJiYWkzIgogICAgaWYgKGZvcGVuKHRhc2siLmlucCIsICJyIikpewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IG47CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICBhW3hdLnB1c2hfYmFjayh5KTsKICAgICAgICBhW3ldLnB1c2hfYmFjayh4KTsKICAgICAgICBlZGdlLnB1c2hfYmFjayh7eCwgeX0pOwogICAgfQoKICAgIGRmc1RhcmphbigxLCAtMSk7CgogICAgaW50IGFucyA9IDA7CiAgICBmb3IoYXV0byBpIDogZWRnZSl7CiAgICAgICAgaW50IHUgPSBpLmZpLCB2ID0gaS5zZTsKICAgICAgICBhbnMgKz0gY2hlY2sodSwgdikgfCBjaGVjayh2LCB1KTsKICAgIH0KCiAgICBjb3V0IDw8IGFuczsKfQo=