func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /STACK:1024000000,1024000000 )   using namespace std;   struct edge {     int v, next;   } e[200010];   int ecnt = 0, head[100010];   int n;   int d[100010];   int leg[100010];   void addedge(int a, int b) {     e[++ecnt].v = b;     e[ecnt].next = head[a];     head[a] = ecnt;   }   void del(int x) {     while (d[x] <= 2) {       d[x] = 0;       int xx = x;       for (int i = head[x]; ~i; i = e[i].next) {         if (d[e[i].v]) {           x = e[i].v;           break;         }       }       if (x == xx) break;     }     leg[x]++;   }   bool solve() {     for (int i = (1); i <= (n); i++) {       if (d[i]) {         int cnt = 0;         for (int j = head[i]; ~j; j = e[j].next) {           int v = e[j].v;           if (d[v]) {             if (leg[v] > 2)               cnt++;             else if (d[v] - leg[v] > 1)               cnt++;           }         }         if (cnt > 2) return false;       }     }     return true;   }   int main() {     cin >> n;     memset((head), (-1), sizeof(head));     memset((d), (0), sizeof(d));     memset((leg), (0), sizeof(leg));     for (int i = (1); i <= (n - 1); i++) {       int u, v;       scanf( %d%d , &u, &v);       addedge(u, v);       addedge(v, u);       d[u]++;       d[v]++;     }     for (int i = (1); i <= (n); i++) {       if (d[i] == 1) del(i);     }     puts(solve() ?  Yes  :  No );     return 0;   }   