Problem: 2063C - Remove Exactly Two
Language: C++20 (GCC 13-64)

Previous submission (verdict: Runtime error on test 2):
//#pragma GCC optimize("O3,unroll-loops,inline,no-stack-protector,fast-math")
//#include <bits/stdc++.h>

//#include <ext/pb_ds/assoc_container.hpp>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <ctime>
#include <random>
#include <vector>
#include <string>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <deque>
#include <fstream>
#include <queue>
#include <array>

//using namespace __gnu_pbds;
using namespace std;

using ll = long long;
using ull = unsigned long long;
using ld = long double;

//#define int long long

const ll INF = 2e9 + 228;
const int MAX_N = 1e5 + 228;
const ll base = 57;
const ll mod = 998244353;
const ld eps = 1e-5;

random_device rd;
mt19937 rnd(rd() + 228 + 57 + 179 + 1337 + 1283 + 1488 + (1000 - 7) + 777 + 792262);

template <typename T>
ostream &operator<<(ostream &out, vector<T> &a) {
    for (auto i : a) out << i << ' ';
    return out;
}

template <typename T>
istream &operator>>(istream &in, vector<T> &a) {
    for (int i = 0; i < (int)a.size(); i++) in >> a[i];
    return in;
}

vector<vector<int>> g;
vector<int> used, can, d;

bool cmp(int a, int b) {
    return g[a].size() > g[b].size();
}

void dfs(int v) {
    used[v] = 1;
    for (auto i : g[v]) {
        if (used[i]) continue;
        d[i] = d[v] + 1;
        dfs(i);
    }
}

void solve() {
    int n;
    cin >> n;
    g.clear();
    g.resize(n);
    d.clear();
    d.resize(n, -1);
    can.clear();
    can.resize(n);
    used.clear();
    used.resize(n);
    for (int i = 1; i < n; ++i) {
        int a, b;
        cin >> a >> b;
        g[--a].push_back(--b);
        g[b].push_back(a);
    }
    if (n == 2) {
        cout << 0 << '\n';
        return;
    }
    vector<int> v(n);
    for (int i = 0; i < n; ++i) v[i] = i;
    sort(v.begin(), v.end(), cmp);
    int ptr = 2;
    while (ptr < n && g[v[ptr]].size() == g[v[1]].size()) {
        ++ptr;
    }
    for (int i = 0; i < ptr; ++i) {
        can[v[i]] = 1;
    }
    d[v[0]] = 0;
    dfs(v[0]);
    int frst1 = -1, sec1 = -1;
    int two = -1;
    for (int i = 0; i < n; ++i) {
        if (d[i] == 1 && can[i]) {
            if (frst1 == -1) frst1 = i;
            else sec1 = i;
        } else if (d[i] == 2 && can[i]) {
            two = i;
        }
    }
    //cout << frst1 << ' ' << sec1 << ' ' << two << '\n';
    //cout << v << '\n';
    if (two != -1) {
        cout << g[v[0]].size() + g[two].size() - 1 << '\n';
    } else if (sec1 == -1) {
        if (frst1 == -1) throw;
        cout << g[v[0]].size() + g[frst1].size() - 2 << '\n';
    } else {
        if (frst1 == -1) throw;
        cout << max(g[frst1].size() + g[sec1].size() - 1, g[v[0]].size() + g[frst1].size() - 2) << '\n';
    }
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    cout.tie(nullptr);
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    int tt = 1;
    cin >> tt;
    while (tt--) solve();
    return 0;
}

/*
░░░░░░░░░░░░░░░░░░░▄▄░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░▄▄██▄▄░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░▀▀██▀▀░░░░░░░░░░░░░░░░░
░░░░░░░░▄▄▄███████▄██▄███████▄▄▄░░░░░░░░
░░░░▄█████▀▄░░▀░░██████░░▀░░▄▀█████▄░░░░
░░▄█▀▀░██░░░░░░░░░░██▀░░░░░░░░░██░▀▀█▄░░
░██░░▄██▀▀░░░░░░░░░██░░░░░░░░░▀▀██▄░▀██░
██░░░░██░░░░░░░░░░░██░░░░░░░░░░░██░░░░██
██░█░░██▀▀░░░░░░░░░██░░░░░░░░░▀▀██░░█░██
██░░░░▀██▄░░░░░░░░░██░░░░░░░░░▄██▀░░░░██
░██░▀░░▀██▀░░░░░░▄████▄░░░░░░▀▄█▀░░▀░██░
░▀██░░▄░▀██▀▄░░░░██▄▄██░░░░▄▀██▀░▄░▄██▀░
░░░██▄▄▄▄██████████████████████▄▄▄▄█▀░░░
░░░░█▀▀▀▀▀▀░░▄▄▄▄▄░░░░▄▄▄▄▄░░▀▀▀▀▀▀█░░░░
░░░░░███░░░░░▀███░░░░░░███▀░░░░░███░░░░░
░░░░░▀██▄░░░░▀▀▀▀▀░░░░▀▀▀▀▀░░░░▄██▀░░░░░
░░░░░▄▄▄▄██████████████████████▄▄▄▄░░░░░
░░░░░░▀▀▀▀░░░░░░░░░░░░░░░░░░░░▀▀▀▀░░░░░░
    ░▐█▀█▄─░▄█▀▄─▒▐▌▐▌─░▄█▀▄─▒▐█▒▐▀
    ░▐█▌▐█░▐█▄▄▐█░▒▐▌░░▐█▄▄▐█▒▐██▌░
    ░▐█▄█▀░▐█─░▐█▒▐▌▐▌░▐█─░▐█▒▐█▒▐▄
      ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
      ███████████████████████████
      ████▀▀█████████████▀▀██████
      ███▄░░░▀▀███████▄░░░░░█████
      █████▄░░░░▀▀██████▄░░░█████
      ███████▄░░░░░▀▀████████████
      █████████▄░░░░░░▀▀█████████
      ███████████▄░░░░░░░▀▀██████
      █████▀███████▄░░░░░░░░▀▀███
      ████░░░▀███████▄░░░░░░░░███
      ████░░░░░▀██████▄░░░░░░████
      █████▄▄▄▄▄████████▄▄▄▄█████
      ███████████████████████████
      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
      ███████████████████████████
      █────██────█───█────██────█
      █─██──█─██─██─██─██─██─██─█
      █─██──█─██─██─██────████──█
      █─██──█─██─██─██─██─██──███
      █────██────██─██─██─██────█
      ███████████████████████████

 ⣿⢛⣛⣛⣛⣛⣛⣛⣛⣛⣛⡛⠛⠛⠛⠛⠛⠛⣛⣛⣛⣛⣛⣛⣛⣛⣛⣛⣛⢻
 ⣿⢸⣿⣿⣿⣿⣿⣿⠟⠉⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠙⠻⣿⣿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⡿⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⣸⣿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⠇⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡄⠄⠄⠸⣧⢿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⡄⠄⠄⠄⢶⣦⡀⠄⠄⠄⠄⠄⠄⠄⣠⠞⢧⣸⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⣇⠄⠄⠄⠈⠉⠁⠄⠄⠄⠄⠄⠄⢰⠏⠄⠄⣿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⣿⣦⣀⠄⠄⠄⠄⠄⠄⠄⠄⠄⣄⠋⢀⣀⣼⣿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⡇⠄⠻⣏⣭⣭⣽⣶⣴⣄⡀⠄⠄⣀⣴⣵⣚⡭⠤⣬⣿⡟⠁⠸⣿⡇⣿
 ⣿⢸⣿⡇⠄⢠⣿⠁⠄⣀⣬⡿⣿⡟⠋⠉⠛⣿⣿⡁⠄⠄⠄⢹⣧⡀⠠⣿⡇⣿
 ⣿⢸⡟⠄⠄⠁⢿⣿⣿⠿⠛⣸⣃⣀⠄⠄⢓⣈⣳⡙⢦⣤⣴⡿⠃⠄⠄⢸⡇⣿
 ⣿⢸⣷⡀⠄⠄⠄⠄⢀⡤⠞⣋⣥⣬⣿⣿⣥⣀⣉⡻⢦⣄⠄⠄⠄⠄⢀⣼⡇⣿
 ⣿⠘⠿⠷⠄⠄⢠⠞⢁⠐⠿⠋⠉⡉⠻⣿⡋⠁⣠⠉⠁⠨⠳⣄⠄⠄⠼⠿⠇⣿
 ⣿⠄⠄⠄⠄⢀⠃⢰⡆⠄⢠⠄⠄⠁⣀⣀⣀⠄⠄⠄⠈⠄⠾⠌⠃⠄⠄⠄⠄⣿
 ⣿⢀⠄⠄⢸⣿⡖⢿⣅⠄⢉⣤⣶⠟⠉⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡄⣿
 ⣿⢸⡀⠄⠄⢧⠃⠸⣿⢿⣿⠋⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⣼⡇⣿
 ⣿⢸⣷⡀⠄⠄⠄⠄⢹⡄⠛⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢀⡄⢀⣾⣿⡇⣿
 ⣿⢸⣿⣿⣆⡀⠄⠄⡀⠻⡄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢀⣴⣿⣴⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⣶⣶⣾⣦⣌⡀⠄⠄⠄⠄⠄⢀⣀⣤⣾⣿⣿⣿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⡿⠿⠿⢿⣿⠿⢿⣿⡿⢿⡿⠿⠿⣿⣿⣿⡿⠿⠿⢿⣿⡿⠿⠿⣿⡇⣿
 ⣿⢸⣿⡇⢠⣦⠄⣿⠄⣾⣿⠄⣸⠇⢠⣤⠄⢻⠏⢠⣴⣦⣠⣿⠁⢰⣤⣿⡇⣿
 ⣿⢸⣿⠃⢀⣀⣴⡟⠄⣿⡿⠄⣿⠄⣼⡿⠄⣼⠄⢾⣯⡄⠄⣿⠄⣤⣼⣿⡇⣿
 ⣿⢸⣿⣠⣾⣿⣿⣿⣄⣀⣠⣼⣿⣀⣠⣤⣾⣿⣦⣀⣉⣠⣾⣧⣤⣠⣼⣿⡇⣿
 ⣿⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣿


 ⢸⣿⣿⣿⡁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠆⠀⣰⡗⣿⣿⠃⠀⠀  
⠀ ⠀⢸⣽⣿⣿⣿⣷⣤⡀⠀⢀⣠⠀⠀⠀⠀⠀⢴⢚⣿⣧⣰⣿⣿⣿⣿⠀⠀⠀  
⠀⠀ ⠈⢿⣿⣿⣿⣷⣿⣏⢰⣾⣿⡄⠀⣠⣷⣾⣵⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀  
⠀⠀⠀ ⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀  
 ⠀⠀⠀⠐⢬⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀  
⠀ ⠀⠀⠀⠀⠘⣿⡟⠛⠿⢿⣿⣿⣿⣿⣿⣿⡟⣿⣿⠋⠉⢹⣿⠀⠀⠀⠀⠀⠀  
⠀⠀ ⠀⠀⠀⠀⠸⣿⣦⣤⣤⣌⣿⣿⣿⣿⣿⣶⣿⣥⣤⣴⣿⣿⠀⠀⠀⠀⠀⢺  
⠀⠀⠀ ⠀⠀⠀⠀⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠉⠀⠀⠀⠀⠀⠀⣼  
⠀⠀⠀⠀ ⠀⠀⠀⡀⠀⠈⠙⢿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿  
 ⣴⠄⠀⠀⠀⠀⠀⢱⣦⠀⠀⠈⣿⣿⣿⡟⢻⡏⠀⣥⣀⡔⠀⠀⠀⠀⠀⢼⣵⣿  
 ⣿⣷⡄⠀⠀⠀⠀⠀⣿⣆⡆⢠⠈⠈⠿⠁⠘⣠⢠⣿⣿⠃⠀⠀⢀⣶⣶⣿⣿⣿  
 ⣿⡟⢋⡀⠀⠀⠀⠀⠸⣿⣷⣾⣆⠀⠀⠀⠀⣿⣾⣿⣿⠀⠀⠀⣾⣿⣟⣿⣿⣿  
 ⣿⣿⣿⣧⡀⠀⠀⠀⠀⢻⣿⣿⣿⡆⠀⠀⢰⣿⣿⣿⡇⠀⠀⢸⣿⣿⣿⣿⣿⣿  
 ⣿⣿⣿⣿⣷⡀⠀⠀⠀⠈⣿⣿⣿⣷⠀⠀⣸⣿⣿⠁⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿  
 ⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠘⠙⣿⡏⠀⠀⢻⡿⠉⢀⣀⣴⣿⣿⣿⣿⣿⣿⣿⣿
*/


Submission (verdict: Accepted):
//#pragma GCC optimize("O3,unroll-loops,inline,no-stack-protector,fast-math")
//#include <bits/stdc++.h>

//#include <ext/pb_ds/assoc_container.hpp>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <ctime>
#include <random>
#include <vector>
#include <string>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <deque>
#include <fstream>
#include <queue>
#include <array>

//using namespace __gnu_pbds;
using namespace std;

using ll = long long;
using ull = unsigned long long;
using ld = long double;

//#define int long long

const ll INF = 2e9 + 228;
const int MAX_N = 1e5 + 228;
const ll base = 57;
const ll mod = 998244353;
const ld eps = 1e-5;

random_device rd;
mt19937 rnd(rd() + 228 + 57 + 179 + 1337 + 1283 + 1488 + (1000 - 7) + 777 + 792262);

template <typename T>
ostream &operator<<(ostream &out, vector<T> &a) {
    for (auto i : a) out << i << ' ';
    return out;
}

template <typename T>
istream &operator>>(istream &in, vector<T> &a) {
    for (int i = 0; i < (int)a.size(); i++) in >> a[i];
    return in;
}

vector<vector<int>> g;
vector<int> used, can, d;

bool cmp(int a, int b) {
    return g[a].size() > g[b].size();
}

void dfs(int v) {
    used[v] = 1;
    for (auto i : g[v]) {
        if (used[i]) continue;
        d[i] = d[v] + 1;
        dfs(i);
    }
}

void solve() {
    int n;
    cin >> n;
    g.clear();
    g.resize(n);
    d.clear();
    d.resize(n, -1);
    can.clear();
    can.resize(n);
    used.clear();
    used.resize(n);
    for (int i = 1; i < n; ++i) {
        int a, b;
        cin >> a >> b;
        g[--a].push_back(--b);
        g[b].push_back(a);
    }
    if (n == 2) {
        cout << 0 << '\n';
        return;
    }
    vector<int> v(n);
    for (int i = 0; i < n; ++i) v[i] = i;
    sort(v.begin(), v.end(), cmp);
    int ptr = 2;
    while (ptr < n && g[v[ptr]].size() == g[v[1]].size()) {
        ++ptr;
    }
    for (int i = 0; i < ptr; ++i) {
        can[v[i]] = 1;
    }
    d[v[0]] = 0;
    dfs(v[0]);
    int frst1 = -1, sec1 = -1;
    int two = -1;
    for (int i = 0; i < n; ++i) {
        if (d[i] == 1 && can[i]) {
            if (frst1 == -1) frst1 = i;
            else sec1 = i;
        } else if (d[i] >= 2 && can[i]) {
            two = i;
        }
    }
    //cout << frst1 << ' ' << sec1 << ' ' << two << '\n';
    //cout << v << '\n';
    if (two != -1) {
        cout << g[v[0]].size() + g[two].size() - 1 << '\n';
    } else if (sec1 == -1) {
        if (frst1 == -1) throw;
        cout << g[v[0]].size() + g[frst1].size() - 2 << '\n';
    } else {
        if (frst1 == -1) throw;
        cout << max(g[frst1].size() + g[sec1].size() - 1, g[v[0]].size() + g[frst1].size() - 2) << '\n';
    }
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    cout.tie(nullptr);
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    int tt = 1;
    cin >> tt;
    while (tt--) solve();
    return 0;
}

/*
░░░░░░░░░░░░░░░░░░░▄▄░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░▄▄██▄▄░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░▀▀██▀▀░░░░░░░░░░░░░░░░░
░░░░░░░░▄▄▄███████▄██▄███████▄▄▄░░░░░░░░
░░░░▄█████▀▄░░▀░░██████░░▀░░▄▀█████▄░░░░
░░▄█▀▀░██░░░░░░░░░░██▀░░░░░░░░░██░▀▀█▄░░
░██░░▄██▀▀░░░░░░░░░██░░░░░░░░░▀▀██▄░▀██░
██░░░░██░░░░░░░░░░░██░░░░░░░░░░░██░░░░██
██░█░░██▀▀░░░░░░░░░██░░░░░░░░░▀▀██░░█░██
██░░░░▀██▄░░░░░░░░░██░░░░░░░░░▄██▀░░░░██
░██░▀░░▀██▀░░░░░░▄████▄░░░░░░▀▄█▀░░▀░██░
░▀██░░▄░▀██▀▄░░░░██▄▄██░░░░▄▀██▀░▄░▄██▀░
░░░██▄▄▄▄██████████████████████▄▄▄▄█▀░░░
░░░░█▀▀▀▀▀▀░░▄▄▄▄▄░░░░▄▄▄▄▄░░▀▀▀▀▀▀█░░░░
░░░░░███░░░░░▀███░░░░░░███▀░░░░░███░░░░░
░░░░░▀██▄░░░░▀▀▀▀▀░░░░▀▀▀▀▀░░░░▄██▀░░░░░
░░░░░▄▄▄▄██████████████████████▄▄▄▄░░░░░
░░░░░░▀▀▀▀░░░░░░░░░░░░░░░░░░░░▀▀▀▀░░░░░░
    ░▐█▀█▄─░▄█▀▄─▒▐▌▐▌─░▄█▀▄─▒▐█▒▐▀
    ░▐█▌▐█░▐█▄▄▐█░▒▐▌░░▐█▄▄▐█▒▐██▌░
    ░▐█▄█▀░▐█─░▐█▒▐▌▐▌░▐█─░▐█▒▐█▒▐▄
      ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
      ███████████████████████████
      ████▀▀█████████████▀▀██████
      ███▄░░░▀▀███████▄░░░░░█████
      █████▄░░░░▀▀██████▄░░░█████
      ███████▄░░░░░▀▀████████████
      █████████▄░░░░░░▀▀█████████
      ███████████▄░░░░░░░▀▀██████
      █████▀███████▄░░░░░░░░▀▀███
      ████░░░▀███████▄░░░░░░░░███
      ████░░░░░▀██████▄░░░░░░████
      █████▄▄▄▄▄████████▄▄▄▄█████
      ███████████████████████████
      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
      ███████████████████████████
      █────██────█───█────██────█
      █─██──█─██─██─██─██─██─██─█
      █─██──█─██─██─██────████──█
      █─██──█─██─██─██─██─██──███
      █────██────██─██─██─██────█
      ███████████████████████████

 ⣿⢛⣛⣛⣛⣛⣛⣛⣛⣛⣛⡛⠛⠛⠛⠛⠛⠛⣛⣛⣛⣛⣛⣛⣛⣛⣛⣛⣛⢻
 ⣿⢸⣿⣿⣿⣿⣿⣿⠟⠉⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠙⠻⣿⣿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⡿⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⣸⣿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⠇⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡄⠄⠄⠸⣧⢿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⡄⠄⠄⠄⢶⣦⡀⠄⠄⠄⠄⠄⠄⠄⣠⠞⢧⣸⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⣇⠄⠄⠄⠈⠉⠁⠄⠄⠄⠄⠄⠄⢰⠏⠄⠄⣿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⣿⣦⣀⠄⠄⠄⠄⠄⠄⠄⠄⠄⣄⠋⢀⣀⣼⣿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⡇⠄⠻⣏⣭⣭⣽⣶⣴⣄⡀⠄⠄⣀⣴⣵⣚⡭⠤⣬⣿⡟⠁⠸⣿⡇⣿
 ⣿⢸⣿⡇⠄⢠⣿⠁⠄⣀⣬⡿⣿⡟⠋⠉⠛⣿⣿⡁⠄⠄⠄⢹⣧⡀⠠⣿⡇⣿
 ⣿⢸⡟⠄⠄⠁⢿⣿⣿⠿⠛⣸⣃⣀⠄⠄⢓⣈⣳⡙⢦⣤⣴⡿⠃⠄⠄⢸⡇⣿
 ⣿⢸⣷⡀⠄⠄⠄⠄⢀⡤⠞⣋⣥⣬⣿⣿⣥⣀⣉⡻⢦⣄⠄⠄⠄⠄⢀⣼⡇⣿
 ⣿⠘⠿⠷⠄⠄⢠⠞⢁⠐⠿⠋⠉⡉⠻⣿⡋⠁⣠⠉⠁⠨⠳⣄⠄⠄⠼⠿⠇⣿
 ⣿⠄⠄⠄⠄⢀⠃⢰⡆⠄⢠⠄⠄⠁⣀⣀⣀⠄⠄⠄⠈⠄⠾⠌⠃⠄⠄⠄⠄⣿
 ⣿⢀⠄⠄⢸⣿⡖⢿⣅⠄⢉⣤⣶⠟⠉⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡄⣿
 ⣿⢸⡀⠄⠄⢧⠃⠸⣿⢿⣿⠋⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⣼⡇⣿
 ⣿⢸⣷⡀⠄⠄⠄⠄⢹⡄⠛⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢀⡄⢀⣾⣿⡇⣿
 ⣿⢸⣿⣿⣆⡀⠄⠄⡀⠻⡄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢀⣴⣿⣴⣿⣿⣿⡇⣿
 ⣿⢸⣿⣿⣿⣿⣶⣶⣾⣦⣌⡀⠄⠄⠄⠄⠄⢀⣀⣤⣾⣿⣿⣿⣿⣿⣿⣿⡇⣿
 ⣿⢸⣿⡿⠿⠿⢿⣿⠿⢿⣿⡿⢿⡿⠿⠿⣿⣿⣿⡿⠿⠿⢿⣿⡿⠿⠿⣿⡇⣿
 ⣿⢸⣿⡇⢠⣦⠄⣿⠄⣾⣿⠄⣸⠇⢠⣤⠄⢻⠏⢠⣴⣦⣠⣿⠁⢰⣤⣿⡇⣿
 ⣿⢸⣿⠃⢀⣀⣴⡟⠄⣿⡿⠄⣿⠄⣼⡿⠄⣼⠄⢾⣯⡄⠄⣿⠄⣤⣼⣿⡇⣿
 ⣿⢸⣿⣠⣾⣿⣿⣿⣄⣀⣠⣼⣿⣀⣠⣤⣾⣿⣦⣀⣉⣠⣾⣧⣤⣠⣼⣿⡇⣿
 ⣿⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣿


 ⢸⣿⣿⣿⡁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠆⠀⣰⡗⣿⣿⠃⠀⠀  
⠀ ⠀⢸⣽⣿⣿⣿⣷⣤⡀⠀⢀⣠⠀⠀⠀⠀⠀⢴⢚⣿⣧⣰⣿⣿⣿⣿⠀⠀⠀  
⠀⠀ ⠈⢿⣿⣿⣿⣷⣿⣏⢰⣾⣿⡄⠀⣠⣷⣾⣵⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀  
⠀⠀⠀ ⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀  
 ⠀⠀⠀⠐⢬⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀  
⠀ ⠀⠀⠀⠀⠘⣿⡟⠛⠿⢿⣿⣿⣿⣿⣿⣿⡟⣿⣿⠋⠉⢹⣿⠀⠀⠀⠀⠀⠀  
⠀⠀ ⠀⠀⠀⠀⠸⣿⣦⣤⣤⣌⣿⣿⣿⣿⣿⣶⣿⣥⣤⣴⣿⣿⠀⠀⠀⠀⠀⢺  
⠀⠀⠀ ⠀⠀⠀⠀⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠉⠀⠀⠀⠀⠀⠀⣼  
⠀⠀⠀⠀ ⠀⠀⠀⡀⠀⠈⠙⢿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿  
 ⣴⠄⠀⠀⠀⠀⠀⢱⣦⠀⠀⠈⣿⣿⣿⡟⢻⡏⠀⣥⣀⡔⠀⠀⠀⠀⠀⢼⣵⣿  
 ⣿⣷⡄⠀⠀⠀⠀⠀⣿⣆⡆⢠⠈⠈⠿⠁⠘⣠⢠⣿⣿⠃⠀⠀⢀⣶⣶⣿⣿⣿  
 ⣿⡟⢋⡀⠀⠀⠀⠀⠸⣿⣷⣾⣆⠀⠀⠀⠀⣿⣾⣿⣿⠀⠀⠀⣾⣿⣟⣿⣿⣿  
 ⣿⣿⣿⣧⡀⠀⠀⠀⠀⢻⣿⣿⣿⡆⠀⠀⢰⣿⣿⣿⡇⠀⠀⢸⣿⣿⣿⣿⣿⣿  
 ⣿⣿⣿⣿⣷⡀⠀⠀⠀⠈⣿⣿⣿⣷⠀⠀⣸⣿⣿⠁⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿  
 ⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠘⠙⣿⡏⠀⠀⢻⡿⠉⢀⣀⣴⣿⣿⣿⣿⣿⣿⣿⣿
*/