#include <bits/stdc++.h>
#include "rts.h"
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
#define N 300005
using namespace std;
int cnt;
bool bz[N];
namespace LCT
{
int sz[N],r[N],f[N],fn[N],dep[N],t[N][2],li[N],ri[N];
void up(int k)
{
sz[k]=sz[t[k][0]]+sz[t[k][1]]+1;
li[k]=(t[k][0])?li[t[k][0]]:k;
ri[k]=(t[k][1])?ri[t[k][1]]:k;
}
void hb(int p,int x,int y)
{
if(x&&p>=0) t[x][p]=y;
if(y) fn[y]=p,f[y]=x;
}
void rot(int k)
{
int fa=f[k],p=fn[k];
hb(p,fa,t[k][1-p]);
hb(fn[fa],f[fa],k);
hb(1-p,k,fa);
up(fa),up(k);
}
int d[N];
void splay(int k,int x)
{
while(f[k]!=x&&fn[k]!=-1&&f[k]!=0)
{
if(f[f[k]]==x||fn[f[k]]==-1||f[f[k]]==0) rot(k);
else if(fn[k]==fn[f[k]]) rot(f[k]),rot(k);
else rot(k),rot(k);
}
up(k);
}
void access(int k)
{
int r=k;
splay(k,0);
fn[t[k][1]]=-1,t[k][1]=0;
up(k);
while(f[k]!=0)
{
int fa=f[k];
splay(fa,0);
fn[t[fa][1]]=-1,hb(1,fa,k);
up(fa),k=fa;
}
splay(r,0);
}
void link(int x,int y)
{
access(x);f[y]=x,fn[y]=-1,up(y);
}
void fd(int x,int y)
{
splay(x,0);
while(x!=y)
{
cnt++;
int p=explore(x,y);
if(p==ri[t[x][0]]) x=t[x][0];
else if(p==li[t[x][1]]) x=t[x][1];
else
{
if(bz[p]) splay(p,0);
else up(p),link(x,p),bz[p]=1;
x=p;
}
}
access(y);
}
}
using namespace LCT;
int de[N];
void solve3(int n,int T)
{
int x=1,y=1;
int i=1;
while(i<=n-1)
{
int w=explore(x,de[i]);
if(bz[w]) swap(x,y),w=explore(x,de[i]),cnt++;
bz[w]=1;
while(w!=de[i]) w=explore(w,de[i]),bz[w]=1,cnt++;
x=w;
while(i<=n-1&&bz[de[i]]) i++;
}
}
void play(int n, int T, int dataType)
{
memset(bz,0,sizeof(bz));
bz[1]=sz[1]=dep[1]=1;
up(1);
fo(i,2,n) de[i-1]=i,sz[i]=1;
random_shuffle(de+1,de+n);
if(dataType==3) {solve3(n,T);return;}
int i=1,w=1;
while(i<=n-1)
{
fd(1,de[i]);
while(i<=n-1&&bz[de[i]]) i++;
}
n++,n--;
}