func_code_string: #include <bits/stdc++.h>   using namespace std;   void solve(int test_number);   int main() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     cout.setf(ios::fixed);     cout.precision(9);     cerr.setf(ios::fixed);     cerr.precision(3);     int n = 1;     for (int i = 0; i < n; i++) {       solve(i);     }   }   const int MAX_N = 300005;   int n, n_edge, deg[MAX_N];   int point[MAX_N], head[MAX_N], next_edge[MAX_N];   bool line[MAX_N];   void add_edge(int u, int v) {     point[n_edge] = v, next_edge[n_edge] = head[u], head[u] = n_edge++;     point[n_edge] = u, next_edge[n_edge] = head[v], head[v] = n_edge++;   }   bool is_line(int u, int p) {     int cnt = 0;     for (int i = head[u]; i >= 0; i = next_edge[i]) {       int v = point[i];       if (v == p) {         continue;       }       if (!line[v]) {         return false;       }       cnt++;       if (cnt > 2) {         return false;       }     }     return true;   }   bool good(int u, int p, int lim) {     int cnt = 0, all = 0;     for (int i = head[u]; i >= 0; i = next_edge[i]) {       int v = point[i];       if (v == p) {         continue;       }       if (is_line(v, u)) {         cnt++;       } else if (!good(v, u, 1)) {         return false;       }       all++;     }     if (all - cnt <= lim) {       return true;     }     return false;   }   void dfs_line(int u, int p) {     int cnt = 0, lst = -1;     for (int i = head[u]; i >= 0; i = next_edge[i]) {       int v = point[i];       if (v == p) {         continue;       }       cnt++;       lst = v;       dfs_line(v, u);     }     if (cnt == 0 || (cnt == 1 && line[lst])) {       line[u] = true;     }   }   void solve(int test_number) {     cin >> n;     memset(head, -1, sizeof(head));     for (int i = 0; i < n - 1; i++) {       int u, v;       cin >> u >> v;       --u, --v;       add_edge(u, v);       deg[u]++;       deg[v]++;     }     for (int root = 0; root < min(n, 50); root++) {       memset(line, false, sizeof(line));       dfs_line(root, -1);       if (good(root, -1, 2) || is_line(root, -1)) {         cout <<  Yes  << endl;         return;       }     }     cout <<  No  << endl;   }   