#include "Joi.h"
#include<bits/stdc++.h>
#define int long long
#define ld   double
#define _1 first
#define _2 second
#define yes cout<<"Yes\n"
#define nah cout<<"No\n"
#define FFF ios_base::sync_with_stdio(0);cin.tie(0);
#define ipr pair<int,int>
#define ret return
#define intt int32_t
#define mid ((l+r)/2)
#define pb push_back
#define lll __int128
using namespace std;
int tst, ts;
intt mo = 998244353, dx[] = {0, 1, 0, -1}, dy[] = {-1, 0, 1, 0};
int mul( int x, int y ) {
    ret ( ( x % mo ) * ( y % mo ) ) % mo;
    ret x*y;
}
int pwo( int x, int y ) {
    int res = 1;
    for( int i = 63; i + 1; i-- )
        res = mul( res, res * ( ( 1ll << i )&y ? x : 1 ) );
    ret res;
}
int dvii( int x, int y ) {
    ret mul( x, pwo( y, mo - 2 ) );
}
int oo( char x ) {
    ret ( int )x - '0';
}
int lgg( int x, int y ) {
    int u = 0;
    while( x ) {
        u++;
        x /= y;
    }
    ret u;
}
int mun( int x, int y ) {
    while( x < y )x += mo;
    ret ( x - y ) % mo;
}
int add( int x, int y ) {
    ret x + y - ( mo * ( x + y >= mo ) );
    ret x + y;
}
int lcm( int x, int y ) {
    ret ( x * y ) / __gcd( x, y );
}
#define endl '\n';
const int  N = 3e4+ 7, N2 = 5e3 + 7, inf = 2e18+7 ;
vector<int>v,vt,vv(N,62),g[N],gt[N],ds[N],vi(N),p(N);
void dft(int i,int d,int pr){
    if(vi[i])
        ret;
    vi[i]=1;
    if(pr!=-1)
        g[pr].pb(i);
    p[i]=pr;
    ds[d].pb(i);
    for(auto it:gt[i]){
        if(it==pr)
            continue;
        dft(it,d+1,i);
    }
}
void dfs(int i,int d,int pr){
    vv[i]=vt[d];
    for(auto it:g[i])
        if(it!=pr)
            dfs(it,d+1,i);
}
void Joi(intt n,intt M, intt A[], intt B[], int X, intt T){
    for(int i=0;i<M;i++)
        gt[A[i]].pb(B[i]),gt[B[i]].pb(A[i]);
            dft(0,0,-1);
    for(int i=0;i<n;i++){
        if(ds[i].size()&&i>58)
            T=1000;
        if(ds[i].size()==0||v.size()>59)
            continue;
        for(auto it:ds[i]){
            if(v.size()>59)
                break;
            vv[it]=v.size();
            v.pb(it);
        }
    }
    if(T==1000){
        set<int>ss;
        for(int i=0;i<n;i++){
            for(auto it:ds[i]){
                int o=i%60;
                vv[it]=o;
                intt u=min(1ll,(1ll<<o)&X);
                MessageBoard((intt)it,u);
                ss.insert(it);
            }
        }
        for(int i=0;i<n;i++){
            if(!ss.count(i)){
            cout<<i<<endl;
                MessageBoard(i,0);
            }
        }
    ret;
    }
    for(int i=1;i<n;i++){
        if(vv[p[i]]==62||vv[i]!=62)
            continue;
        set<int>st;
        vt.clear();
        int o=i;
        while(o!=0)
            o=p[o],st.insert(o);
        for(int i=59;i>=0;i--)
            if(!st.count(v[i]))
                vt.pb(i);
        dfs(i,0,p[i]);
    }
    int o=0;
    for(int i=0;i<60;i++)
        o+=(X&(1ll<<i));
    for(intt i=0;i<n;i++){
        intt u=i;
        intt y=min(1ll,X&(1ll<<vv[i]));
        MessageBoard(u,y);
    }
}
#include "Ioi.h"
#include<bits/stdc++.h>
#define int long long
#define ld   double
#define _1 first
#define _2 second
#define yes cout<<"Yes\n"
#define nah cout<<"No\n"
#define FFF ios_base::sync_with_stdio(0);cin.tie(0);
#define ipr pair<int,int>
#define ret return
#define intt int32_t
#define mid ((l+r)/2)
#define pb push_back
#define lll __int128
using namespace std;
int tst, ts;
intt mo = 998244353, dx[] = {0, 1, 0, -1}, dy[] = {-1, 0, 1, 0};
int mul( int x, int y ) {
    ret ( ( x % mo ) * ( y % mo ) ) % mo;
    ret x*y;
}
int pwo( int x, int y ) {
    int res = 1;
    for( int i = 63; i + 1; i-- )
        res = mul( res, res * ( ( 1ll << i )&y ? x : 1 ) );
    ret res;
}
int dvii( int x, int y ) {
    ret mul( x, pwo( y, mo - 2 ) );
}
int oo( char x ) {
    ret ( int )x - '0';
}
int lgg( int x, int y ) {
    int u = 0;
    while( x ) {
        u++;
        x /= y;
    }
    ret u;
}
int mun( int x, int y ) {
    while( x < y )x += mo;
    ret ( x - y ) % mo;
}
int add( int x, int y ) {
    ret x + y - ( mo * ( x + y >= mo ) );
    ret x + y;
}
int lcm( int x, int y ) {
    ret ( x * y ) / __gcd( x, y );
}
#define endl '\n';
const int M =1007, N = 3e4+ 7, N2 = 5e3 + 7, inf = 2e18+7 ;
vector<int>v,vt,vv(N,62),g[N],gt[N],ds[N],vi(N),p(N),an(N);
set<int>s;
int uu;
int ff(int x) {
    for(int i=0; i<60; i++)
        if(x==v[i])
            ret 1;
    ret 0;
}
void dfa(int i) {
    s.erase(vv[i]);
    for(auto it:g[i]) {
        if(it==p[i])
            continue;
        if(ff(it)==0||!s.count(vv[it])) {
            //cout<<it<<" "<<ff(it)<<" "<<vv[it]<<endl;
            continue;
        }
        uu=it;
        an[vv[it]]=Move(it);
        dfa(it);
    }
    if(p[i]!=-1) {
        s.erase(vv[p[i]]);
        uu=p[i],Move(p[i]);
    }
}
void dft(int i,int d,int pr) {
    if(vi[i])
        ret;
    vi[i]=1;
    if(pr!=-1)
        g[pr].pb(i);
    p[i]=pr;
    ds[d].pb(i);
    for(auto it:gt[i]) {
        if(it==pr)
            continue;
        dft(it,d+1,i);
    }
}
void dfs(int i,int d,int pr) {
    vv[i]=vt[d];
    for(auto it:g[i])
        if(it!=pr)
            dfs(it,d+1,i);
}
int Ioi(intt n, intt M, intt A[], intt B[], intt P, intt V, intt T) {
    int l=uu;
    set<pair<int, int> > edges;
    for(int i=0; i<M; i++) {
        gt[A[i]].pb(B[i]),gt[B[i]].pb(A[i]);
        edges.insert({ A[i], B[i] });
        edges.insert({ B[i], A[i] });
    }
    dft(0,0,-1);
    for(int i=0; i<n; i++) {
        if(ds[i].size()&&i>58)
            T=1000;
        if(ds[i].size()==0||v.size()>59)
            continue;
        for(auto it:ds[i]) {
            if(v.size()>59)
                break;
            vv[it]=v.size();
            v.pb(it);
        }
    }
    for(int i=0; i<n; i++) {
        if(ds[i].size()&&i>58)
            T=1000;
    }
    if(T==1000)
        for(int i=0; i<n; i++)
            for(auto it:ds[i]) {
                int o=i%60;
                vv[it]=o;
            }
    an[vv[P]]=V;
    for(int i=0; i<60; i++)
        s.insert(i);
    s.erase(vv[P]);
    if(T==1000) {
        while(s.size()&&P!=0) {
            P=p[P];
            an[vv[P]]=Move(P);
            s.erase(vv[P]);
        }
        while(s.size()) {
            P=g[P][0];
            an[vv[P]]=Move(P);
            s.erase(vv[P]);
        }
        int o=0;
        for(int i=0; i<60; i++)
            o+=(an[i]*(1ll<<i));
        ret o;
    }
    for(int i=1; i<n; i++) {
        if(vv[p[i]]==62||vv[i]!=62)
            continue;
        set<int>st;
        vt.clear();
        int o=i;
        while(o!=0)
            o=p[o],st.insert(o);
        for(int i=59; i>=0; i--)
            if(!st.count(v[i]))
                vt.pb(i);
        dfs(i,0,p[i]);
    }
    while(P!=0&&ff(P)==0) {
        P=p[P];
        an[vv[P]]=Move(P);
        s.erase(vv[P]);
    }
    uu=P;
    while(P!=0)
        dfa(P),P=p[P];
    dfa(0);
    int o=0;
    for(int i=0; i<60; i++)
        o+=(an[i]*(1ll<<i));
    ret o;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |