#include<bits/stdc++.h>
#define For(i,j,k) for(int i=(j);i<=(k);i++)
#define foR(i,j,k) for(int i=(j);i>=(k);i--)
#define mst(a,b) memset(a,b,sizeof(a)); 
#define vi vector<int>
#define mkp make_pair
#define pii pair<int,int>
#define SZ(x) ((int)x.size())
#define pb push_back
#define ull unsigned long long
using namespace std;
int read() { int x; scanf("%d",&x); return x; }
const int P=998244353; 
int add(int x,int y) { return (x+y)%P; }
int sub(int x,int y) { return (x-y+P)%P; }
int mul(int x,int y) { return 1ull*x*y%P; }
void addmod(int &x,int y) { x=add(x,y); }
void submod(int &x,int y) { x=sub(x,y); }
void mulmod(int &x,int y) { x=mul(x,y); }
void fprint(int *a,int n) {For(i,1,n) fprintf(stderr,"%d%c",a[i]," \n"[i==n]); }
const int MN=3e5+5; 
int n,Q,QL[MN],QR[MN],a[MN],b[MN]; 
namespace sub1 {
	int n,A[MN],B[MN]; 
	struct SMT {
		static const int N=MN<<2; 
		ull sa[N],sb[N],ans[N],ta[N],tb[N]; 
		#define ls (k<<1)
		#define rs (k<<1|1)
		#define mid ((l+r)>>1)
		void build(int k,int l,int r) {
			sa[k]=sb[k]=ans[k]=ta[k]=tb[k]=0; 
//			cerr<<l<<' '<<r<<endl;
			if(l==r) return ; 
			build(ls,l,mid),build(rs,mid+1,r); 
		}
		void pushup(int k) {
			ans[k]=ans[ls]+ans[rs]; 
			sa[k]=sa[ls]+sa[rs]; 
			sb[k]=sb[ls]+sb[rs]; 
		}
		void pushr(int k,int l,int r,ull A,ull B) {
			ans[k]+=A*sb[k]+B*sa[k]+A*B*(r-l+1); 
			sa[k]+=A*(r-l+1),ta[k]+=A,sb[k]+=B*(r-l+1),tb[k]+=B; 
		}
		void pushdown(int k,int l,int r) {
			pushr(ls,l,mid,ta[k],tb[k]),pushr(rs,mid+1,r,ta[k],tb[k]);
			ta[k]=tb[k]=0;  
		}
		void mdfA(int k,int l,int r,int ql,int qr,ull v) {
			
			if(l>qr||r<ql) return; 
			if(ql<=l&&r<=qr) return pushr(k,l,r,v,0);
			pushdown(k,l,r); 
			mdfA(ls,l,mid,ql,qr,v); mdfA(rs,mid+1,r,ql,qr,v); 
			pushup(k); 
			
		}
		void mdfB(int k,int l,int r,int ql,int qr,ull v) {
			
			if(l>qr||r<ql) return; 
			if(ql<=l&&r<=qr) return pushr(k,l,r,0,v);
			pushdown(k,l,r); 
			mdfB(ls,l,mid,ql,qr,v); mdfB(rs,mid+1,r,ql,qr,v); 
			pushup(k); 
		}
		ull qry() {
			return ans[1]; 
		}
	} tr;
	int sa[MN],ta,sb[MN],tb; 
	ull qry(int l,int r) {
		
		n=r-l+1; 
		For(i,l,r) A[i-l+1]=a[i],B[i-l+1]=b[i]; 
		/*
		ull tans=0; 
		For(i,1,n) {
			ull mxA=0,mxB=0; 
			For(j,i,n) {
				mxA=max(mxA,(ull)A[j]);
				mxB=max(mxB,(ull)B[j]); 
				tans+=mxA*mxB; 
			}
			
		} 
		return tans; 
		*/
		tr.build(1,1,n); 
		ull ans=0; ta=0,tb=0; 
		For(i,1,n) {
			tr.mdfA(1,1,n,i,i,A[i]); 
			tr.mdfB(1,1,n,i,i,B[i]); 
			while(ta&&A[i]>A[sa[ta]]) 
				tr.mdfA(1,1,n,sa[ta-1]+1,sa[ta],A[i]-A[sa[ta]]),ta--; 
			while(tb&&B[i]>B[sb[tb]]) 
				tr.mdfB(1,1,n,sb[tb-1]+1,sb[tb],B[i]-B[sb[tb]]),tb--; 
			sa[++ta]=i,sb[++tb]=i; 
			ans+=tr.qry();  
		}
		return ans;
	}
	void solve() {
		For(i,1,Q) {
			printf("%llu\n",qry(QL[i],QR[i])); 
		}
	}
}
void works() {
	int n=100000; printf("%d\n",n); 
	For(i,1,n) a[i]=i; 
	For(i,1,n) printf("%d ",a[i]); printf("\n"); 
	For(i,1,n) b[i]=i;
	For(i,1,n) printf("%d ",b[i]); printf("\n");  
	Q=1; cout<<Q<<endl; 
	cout<<1<<' '<<n<<endl;  
}
int main() {
	freopen("match.in","w",stdout);
	cout<<0<<' '; 
	int T=1;
	while(T--) {
		works(); 
	}
	return 0; 
}
