#include<bits/stdc++.h>
using namespace std;
int a[65540];
template<class T>inline void read(T &x){
    x=0;register char c=getchar();register bool f=0;
    while(!isdigit(c))f^=c=='-',c=getchar();
    while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
    if(f)x=-x;
}
int main(){
	int n,t;
	cin>>n;
	int min1=-INT_MAX,min2=-INT_MAX;
	int ans1=0,ans2=0;
	int l=pow(2,n)/2,r=pow(2,n);
	for(int i=1;i<=l;i++){
		read(t);
		if(min1<t)
			ans1=i,min1=t;		
	}
	for(int i=l+1;i<=r;i++){
		read(t);
		if(min2<t)
			ans2=i,min2=t;
	}
	if(min1>min2)cout<<ans2<<endl;
	else cout<<ans1<<endl;
	
	
}

#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a),i##END=(b);i<=i##END;i++)
#define Rof(i,b,a) for(int i=(b),i##END=(a);i>=i##END;i--)
#define go(u) for(int i=head[u];i;i=nxt[i])
using namespace std;
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*f;
}
const int N=1e2+10,M=1e4+10;
char s[N];int a[N],b[M][N];
signed main(){
	int n=read()+1;
	scanf("%s",s+1);
	For(i,1,n)a[i]=read();
	int k=1e5;
	For(i,2,n)k=min(k,abs(a[i]-a[i-1]));
	printf("%d\n",k);
	For(i,1,k){
		For(j,1,n){
			printf("%d ",(a[j]+i-1)/k);
		}
		puts("");
	}
	return 0;
}