/*The code to turn off all bulbs in a matrix of bulbs */ #include #include #include typedef char ** MATRIX; typedef char * VECTOR; typedef char *const* CONST_MATRIX; typedef const char * CONST_VECTOR; MATRIX matrix_alloc2(int n, int m){  MATRIX x= (MATRIX)malloc(sizeof(char *)*n+sizeof(char)*n*m);  int i;  x[0]=(char *)(x+n);  for(i=1;i0)sum^=in[i-1][j];         if(i0)sum^=in[i-1];         if(i=1)h[i][i-1]=1;         h[i][i]=1;         if(i0){   int delta=freedom_count;   for(k=m-1,t=freedom_count-1;k>=0&&delta>0;k--){    if(k==freedom_index[t]){     int i;     for(i=0;i0){     for(i=0;i=20)freedom_count=20;//do not search too much  int u;  int best_one_count=n*m+1;  MATRIX bm=matrix_alloc2(n,m);  for(u=0;u<1<=0;k--){             H_mul_vector(x[k],x[k+1],m); #ifdef _DEBUG             printf("x[%d] 1:",k);vector_output(x[k],m);printf("/n"); #endif             vector_sum(x[k],init[k+1],m); #ifdef _DEBUG             printf("x[%d] 2:",k);vector_output(x[k],m);printf("/n"); #endif             vector_sum(x[k],x[k+2],m); #ifdef _DEBUG             printf("x[%d] 3:",k);vector_output(x[k],m);printf("/n"); #endif         }   int lc=maxtrix_count_one(x,n,m);   if(lc1000){             Usage(argv[0]);         }else if(n<=1){             printf("%d/n",n);             exit(0);         }else{             init=matrix_alloc(n);             matrix_init_const(init,1,n,n);    *pn=*pm=n;    return;         }  }else if(argc==3){         int n = atoi(argv[1]);   int m = atoi(argv[2]);         if(n<0||n>1000||m<0||m>1000){             Usage(argv[0]);         }else if(n<=1||m<=1){             printf("%d/n",n);             exit(0);         }else{             init=matrix_alloc2(n,m);             matrix_init_const(init,1,n,m);    *pn=n;*pm=m;             return;         }  }else{         int n=argc-1;         int i,j;   int m=strlen(argv[1]);         init=matrix_alloc2(n,m);         for(i=0;i