#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define db double
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fp(i,a,b) for(int i=(a);i<(b);i++)
#define de(i,a,b) for(int i=(a);i>=(b);i--)
#define fs(i,u) for(int i=head[u];i;i=nxt[i])
#define pii pair<int, int>
#define pdd pair<db,db>
#define pb push_back
#define fir first
#define sec second
#define ls (now<<1)
#define rs (now<<1|1)
#define mid ((l+r)>>1)
#define lowbit(x) (x&(-x))
using namespace std;
inline ll rd(){
ll x=0,f=1;char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch)){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
const int maxn=1e5+10;
const ll mod=11451419198102353;
int n,b[maxn],fat[maxn],dep[maxn];
int head[maxn],to[maxn<<1],nxt[maxn<<1],cnt=1;
void add_e(int u,int v){
to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
}
void dfs(int u,int fa){
dep[u]=dep[fa]+1;fat[u]=fa;
fs(i,u){
int v=to[i];
if(v==fa)continue;
dfs(v,u);
}
}
int lca(int x,int y){
if(dep[x]<dep[y])swap(x,y);
while(dep[x]^dep[y])x=fat[x];
while(x^y)x=fat[x],y=fat[y];
return x;
}
int main(){
freopen("data.in","w",stdout);
n=30;
cout<<n<<endl;
fo(i,1,n)printf("1 ");puts("");
fo(i,2,n){
int u=i,v=rand()%(i-1)+1;
cout<<u<<" "<<v<<endl;
add_e(u,v);
add_e(v,u);
}
dfs(1,0);
fo(i,1,n){
b[i]=rand()%n+1;
while(b[i]==b[i-1])b[i]=rand()%n+1;;
}
fo(i,1,n)cout<<b[i]<<" ";puts("");
fp(i,1,n){
int l=lca(b[i],b[i+1]);
int dis=(dep[b[i]]+dep[b[i+1]]-2*dep[l]);
while(1){
int x=rand()%dis+1;
if(dis%x==0){
cout<<x<<" ";
break;
}
}
}
return 0;
}