// random walk over 11x11 0/1 matrices; for each, cofactors of last row -> all 2^11 subset sums = dets
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define N 11
static unsigned long long s=88172645463325252ULL;
static inline unsigned long long rnd(){s^=s<<13;s^=s>>7;s^=s<<17;return s;}
static char seen[4000]; // index |det|
// exact det of integer matrix via Bareiss with long long
long long detm(long long a[N][N],int n){long long m[N][N];memcpy(m,a,sizeof(m));long long prev=1;int sign=1;
 for(int k=0;k<n-1;k++){int p=k;while(p<n&&m[p][k]==0)p++;if(p==n)return 0;
  if(p!=k){for(int j=0;j<n;j++){long long t=m[k][j];m[k][j]=m[p][j];m[p][j]=t;}sign=-sign;}
  for(int i=k+1;i<n;i++){for(int j=k+1;j<n;j++)m[i][j]=(m[i][j]*m[k][k]-m[i][k]*m[k][j])/prev;}
  prev=m[k][k];}
 return sign*m[n-1][n-1];}
int main(int argc,char**argv){s^=strtoull(argv[1],0,10)*2654435761ULL;long long steps=atoll(argv[2]);
 int A[N][N];for(int i=0;i<N;i++)for(int j=0;j<N;j++)A[i][j]=rnd()&1;
 double cur=0,T=atof(argv[3]);
 for(long long t=0;t<steps;t++){
  int i=rnd()%(N-1),j=rnd()%N;A[i][j]^=1; // keep last row free
  long long C[N];
  for(int c=0;c<N;c++){long long m[N][N];int r=0;for(int ii=0;ii<N-1;ii++){int cc=0;for(int jj=0;jj<N;jj++)if(jj!=c)m[r][cc++]=A[ii][jj];r++;}
   long long d=detm(m,N-1);C[c]=((N-1+c)%2?-d:d);}
  int nz=0;for(int c=0;c<N;c++)if(C[c])nz=1;
  double sc=0;for(int c=0;c<N;c++)sc+=fabs((double)C[c]);sc=log(sc+1);
  if(sc<cur && (double)(rnd()%1000000)/1e6>exp((sc-cur)/T)){A[i][j]^=1;continue;} cur=sc;
  if(!nz){continue;}
  int newv=0;
  for(int mask=0;mask<(1<<N);mask++){long long v=0;for(int c=0;c<N;c++)if(mask>>c&1)v+=C[c];if(v<0)v=-v;
   if(v<4000&&!seen[v]){seen[v]=1;newv++;
     printf("%lld",v);for(int ii=0;ii<N-1;ii++){printf(" ");for(int jj=0;jj<N;jj++)printf("%d",A[ii][jj]);}printf(" ");for(int c=0;c<N;c++)printf("%d",mask>>c&1);printf("\n");}}
  if(newv)fflush(stdout);
 }
}
