/* Nonogram Solver (Japanese Illust Logic Solver) Program, Sample Code

Ver. 2014/05/24 9:30am

This file is m246k.c
gcc -o m246k m246k.c -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 -lGL -O2

Available OS : Ubuntu or Linux Mint (May be LOW Versions ?)

Required Library : $ sudo apt-get install libX11-dev libx11-6 libncurses5-dev

Reference URL : [1] http://logic777.web.fc2.com/

                [2] http://logic777.web.fc2.com/ne/index312.htm

DownLoad URL : [3] http://ubuntu.nomaki.jp/ubu/biglogic/biglogic_k140430a.zip

usage: $ ./m246k [mno file]

$ ./m246k micky.mno
or
$ ./m246k micky

[mno file example: (micky.mno)]
===== start of micky.mno file ==== From 26 Line To 99 Line ====
;
;  ↓ここから本番です
;
*M ミッキーマウスがウィンクする
*Y35
*T30
;
*y001 16
*y002 16
*y003 16
*y004 15
*y005 13
*y006 11
*y007 8
*y008 12
*y009 3.5.2
*y010 1.4.2.2
*y011 2.4.1.2
*y012 3.5.2
*y013 3.4.2
*y014 8.3.2
*y015 8.1.1.2
*y016 8.1.1.2.2
*y017 8.1.1.2.4
*y018 8.1.1.1.2.2
*y019 9.2.1.2.1
*y020 9.3.1.1.1.1
*y021 10.9.3.1
*y022 11.4.1.1
*y023 1.11.1.4.1.1
*y024 7.1.5.1.2
*y025 5.6.2.1
*y026 3.5.1.2
*y027 3.2.4.2.1
*y028 2.2.2.2
*y029 1.1.2.2.2
*y030 2.3.3.2.3
*y031 2.8.2.4
*y032 3.1.6.7
*y033 5.4.8
*y034 2.9
*y035 18
;
*t001 14
*t002 12
*t003 14
*t004 14
*t005 17
*t006 20
*t007 16.2
*t008 4.15.2
*t009 5.4.6.1
*t010 6.2.3.2
*t011 6.2.2.1.1
*t012 8.1.1.1
*t013 8.1.3.2.1
*t014 8.1.2.3
*t015 9.7.2.2
*t016 9.1.4.3.1
*t017 10.1.3.1.3.1
*t018 11.2.3.3.1
*t019 9.7.3.3.1
*t020 6.1.1.4.3.1
*t021 5.1.2.1.5.3.1
*t022 4.2.2.3.5.2.2
*t023 3.2.1.2.1.4.2.3
*t024 2.1.1.3.2.5
*t025 3.2.6
*t026 6.1.3.2.4
*t027 4.5.2.5
*t028 1.1.3.6
*t029 2.3.6
*t030 7.6
;
===== end of micky.mno file =====


*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <time.h>

#define  LGETC   67890L
#define  S40     55
#define  S60     160
#define  TTN     7
#define  TT20    300
#define  TT25    200
#define  SS10    14
#define  TT12    30
#define  TT8     300
#define  TT5     10
#define  TT4     20
#define  A12     12
#define  A15     12
#define  EESFS   1
#define  EESFU   000000
#define  GGSFS   0
#define  GGSFU   990000
#define  max     512
#define  KFIN    102
#define  KSTART  103
#define  KEND    104
#define  KKK     105
#define  NARABI  106
#define  CLK     1.0
#define  NISEN   2000
#define  BYO     100
#define  M1F     1000
#define  R1F     500
#define  R2F     180
#define  R3F     180
#define  R4F     180
 
char msg[200];
unsigned char data[max][max];
//unsigned char data2[max][max];
unsigned char ht[max][NARABI];
unsigned char hy[max][NARABI];
int            it[max][NARABI];
int            iy[max][NARABI];
unsigned char ht5[max][NARABI];
unsigned char hy5[max][NARABI];
/*
int asx[NISEN];
int asy[NISEN];
int asj[NISEN];
int ask[NISEN];
int asl[NISEN];
int ascnt=0;
*/
int kmf,kma,kmb;
int nr[NARABI][max];
int nr2[NARABI][max];
int nr3[NARABI][max];
int nt[NARABI];

int ut[max][NARABI];
int uy[max][NARABI];
int sst[max][NARABI];
int ssy[max][NARABI];
int eet[max][NARABI];
int eey[max][NARABI];

long ffts[max],ffys[max];
long fftu[max],ffyu[max];
long FFT,EEE;
int CC10=440,jcnt=0;

long aac=0x772222,bbc=0xeeee88;
int notimesave=0;
long kaime,fasi,fasj,fasum;
long lgetc=0;
int lsa,lea;

char sss[200];
long pt1s,st1s,pt3s,st3s,pt4s,st4s;
long dsf2s,esfs,esf2s;
long pt1u,st1u,pt3u,st3u,pt4u,st4u;
long dsf2u,esfu,esf2u,tt1s;
long gsfs,gsfu;
long oldsec=0, nowsec=0;
long oldvsec=0,nowvsec=0;
void gettime();
long getsec,getusec;
int ttk;

   int bst,bed,bb[NARABI],mb[NARABI],ma[NARABI];
   int maa[NARABI];
   int l[NARABI],ne[NARABI],ns[NARABI];
   int ne2[NARABI],ns2[NARABI];
   int z1[max],z2[max],zflag,iymax,itmax;
   int s1,k1,z3,z4,fff,ends;

   int TT10;
long long int FFF;

void uucheckt(int i);
void uuchecky(int i);
void uu0checkt(int i);
void uu0checky(int i);
void uuacheckt(int i);
void uuachecky(int i);
void uu2checkt(int i,int km,int ns[NARABI]);
void uu2checky(int i,int km,int ns[NARABI]);
void uu4checkt(int i,int km,int ns[NARABI]);
void uu4checky(int i,int km,int ns[NARABI]);
void uubcheckt(int i,int km,int ns[NARABI]);
void uubchecky(int i,int km,int ns[NARABI]);
void uus(int itys);
void uue(int i,char ty);
void lpph();

int katei1();
int katei2();
int katei3(int i,int j);
int katei3a(int i,int j);
int katei3all();
void printi(char yt,int i);
void ccheckt();
void cchecky();
 
unsigned long d[max],d2[max],dx;
unsigned int  fup[max],fdw[max],f1[max],f2[max];
int  tatemax, yokomax;
int  kmin, kmax;
int  mmax;
int  ls,le;
int  scount,sc;
int  ktmax,kymax;
int  eflag,eflag2,eflag3,eflag4,eflag5,eflag6;
clock_t time1, time2;
long extime;
int  dot1,dot2;
int  sl=6,sb=0,sa=0;
int  trace=0;
int  kdata=50;
int  speed=5;
int  length=220;
long nuri=0;

int asc11(char a);

void intro();
void intro2();
void mainz();
void mainy();
void mno_open1(char *file);
void mno_save1();
void point1x();
void point1z();
void point2x();
void point3();
void point4a();
void point5a();
void sum1it(int i, int kst, int ked, int lst, int led);
void sum1iy(int i, int kst, int ked, int lst, int led);
void batu1it(int i, int kst, int ked, int lst, int led);
void batu1iy(int i, int kst, int ked, int lst, int led);
void kmck(int i,char yt);
void bcheckt();
void bchecky();
void bcheck2t(int i);
void bcheck2y(int i);
void uniqueing();
void uniqt();
void uniqy();
void printi(char yt,int i);
void pcheckt();
void pchecky();
void pcheckt2(int i);
void pchecky2(int i);
void pcheckt3(int i);
void pchecky3(int i);
void qcheckt2(int i);
void qchecky2(int i);
void rcheckt();
void rchecky();
void ucheckt();
void uchecky();
void ucheckt2(int i);
void uchecky2(int i);
void ucheckt3();
void uchecky3();
void scheckt();
void schecky();
void dcheckt();
void dchecky();
void u1t();
void u1y();
void v2it();
void v2iy();
void fax1it(int i,int lst,int led);
void fax1iy(int i,int lst,int led);
void mark(int i, int j, char yt,unsigned char val);
void vmark(int i, int j, char yt,int val);
int  map(int i, int l, char yt,int val);
void ksef(int i, char yt);
void lse(int i, char yt);
void ch();
void ch1();
void swe(int i,char yt);
int min11(int a,int b);
int max11(int a,int b);
double min22(double a,double b);
double max22(double a,double b);
int  fincount();
void ktymax();
void pr_10x(int suu,int x,int y,int col);
void a_write1(int a,int b,unsigned char *c,int ss);
void chset1(int a, int b,int c,int ss);
void box(int x1,int y1,int fu,int iro);
void errorbox(int x1,int y1,int fu);
void newz();
void newz2();
void newz3();
int newf,newf2;

struct line{
   char ty;
   int k,i;
   int k1,start,end,kmax,kmin,len;
   long fas,fau;
   struct line *next;
};

struct backboard{
unsigned  char data_black[max][max];
unsigned  char data_white[max][max];
unsigned char ht_black[max][NARABI];
unsigned char hy_black[max][NARABI];
unsigned char ht_white[max][NARABI];
unsigned char hy_white[max][NARABI];
int  it_black[max][NARABI];
int  iy_black[max][NARABI];
int  it_white[max][NARABI];
int  iy_white[max][NARABI];
int sst_black[max][NARABI];
int ssy_black[max][NARABI];
int eet_black[max][NARABI];
int eey_black[max][NARABI];
int sst_white[max][NARABI];
int ssy_white[max][NARABI];
int eet_white[max][NARABI];
int eey_white[max][NARABI];
   int no,jotai,mujun,ltemp;
   int ii,jj,b1,w1;
   long b3,w3;
   struct backboard *next,*back;
};


long fsfs,fsfu;

struct line *stt;
struct line *start,*info2;
struct line *last,*info,*gcdata,*temp;
struct line *stt2;
struct line *start2,*info22;
struct line *last2,*info2,*gcdata2,*temp2;
struct line *shojun(struct line *);
struct line *node_create();

struct backboard *sttbb,*lpp,*startff,*gcdataff;
struct backboard *startbb,*info2bb;
struct backboard *lastbb,*infobb,*gcdatabb,*tempbb;
struct backboard *gc2bb;
struct backboard *start2bb;
struct backboard *backboard_create();

struct backboard *sttcc;
struct backboard *startcc,*info2cc;
struct backboard *lastcc,*infocc,*gcdatacc,*tempcc;
struct backboard *gc2cc;
struct backboard *start2cc;

int try1();

void movedata(unsigned char d1[max][max],unsigned char d2[max][max],unsigned char zht1[max][NARABI],unsigned char zht2[max][NARABI],unsigned char zhy1[max][NARABI],unsigned char zhy2[max][NARABI],int zit1[max][NARABI],int zit2[max][NARABI],int ziy1[max][NARABI],int ziy2[max][NARABI]);

void movedata2(int st1[max][NARABI],int st2[max][NARABI],int sy1[max][NARABI],int sy2[max][NARABI],int et1[max][NARABI],int et2[max][NARABI],int ey1[max][NARABI],int ey2[max][NARABI]);

int nokori10(int i, int j);
int nokori20();
int rote( long dsfs,long dsfu);
int rote0(long dsfs,long dsfu);
int mapflg=0,maperr;
long tynuri=0;
int mujunflg=0;

void first();
void hantei();
void g_dot(int x, int y);
void g_text(int x, int y,char *str);
void g_line(int x0, int y0, int x1, int y1);
void g_rgb(long iro);
void g_fill(int x0,int y0, int wid, int hei);
void g_box(int x0, int y0, int wid, int hei);
void g_clear();

Display *dpy;
int screen;
Window win, root;
GC gc;
unsigned int win_width=1024, win_height=600;
unsigned int dummy;
XEvent event;
KeySym key_sym;
Atom atom1, atom2;

int loop1=1,f2flg;

int exx[100],exy[100],exz[100],ex1;
int newt[max],newy[max];
int newt2[max],newy2[max];
int newt3[max],newy3[max];
int oldt[max],oldy[max];
char ar2[20],ar3[30],fbc[10];
int fbb;
char cch,uuu[100];
   unsigned char test_mno[10]="test.mno",test[10]="test";
   unsigned char filet[30];
   unsigned char filek[30];
int argc1,kk;
float tt1=0.0;
   char *wd[7]={"日","月","火","水","木","金","土"};
   time_t  t;
   struct tm *tmp;

int main( int argc, char *argv[] )
{
 
   int si,cc,dd1,dd2,i,j,k,l,m,n;
   unsigned char kcrgb[5]=".mno",arg[20],*arx;
   FILE *fp,*ft;

   argc1=argc;
   gettime();
   st1s=getsec;
   st1u=getusec;
   first();

   if(argc<2){
      mno_open1(test_mno);
   }
   else{
      si=0;
      arx=argv[1];
      while(*arx != '\0' && *arx != '.' && si<8){
         arg[si] = *arx;
         arx++;
         si++;
      }
      arg[si]='\0';
      strcpy(ar2,arg);
      strcat(arg,kcrgb);
      mno_open1(arg);
      
      g_rgb(0xffffff); g_fill(600,13,80,13);
      g_rgb(0x0000ff); g_text(610,26,arg);
   }

      sprintf(sss,"size: %dx%d",yokomax,tatemax);
      g_rgb(0xffffff); g_fill(500,0,100,13);
      g_rgb(0x0000ff); g_text(520,13,sss);

      sprintf(sss,"Exe: %s",argv[0]);
      g_rgb(0xffffff); g_fill(500,13,100,13);
      g_rgb(0x0000ff); g_text(520,26,sss);
  
   ktymax();
   kk=max11(tatemax,yokomax);
   if(yokomax<=10 && tatemax<=20){
      dot1=25;
      dot2=24;
   }
  else if(yokomax<=15 && tatemax<=30){
      dot1=20;
      dot2=19;
   }
  else if(yokomax<=20 && tatemax<=40){
      dot1=15;
      dot2=14;
   }
  else if(yokomax<=25 && tatemax<=40){
      dot1=13;
      dot2=12;
   }
   else{
      dd1=420/yokomax;
      dd2=800/tatemax;
      dd1=min11(dd1,dd2);
      dot1=dd1;
      dot2=dd1-1;
      if(dot2<28) dot2=dot1;
      ktmax=kymax=0;
    }

   intro();
   fbb=1;
   tt1=0.0;
   tt1s=0;
   oldsec=0;
   strcpy(ar3,ar2);
   strcat(ar3,".");
   sprintf(uuu,"%d",fbb);
   strcat(ar3,uuu);
   fp=fopen(ar3,"r");
   if(fp!=NULL){

       while(fp!=NULL){
          fbb++;
          strcpy(ar3,ar2);
          strcat(ar3,".");
          sprintf(uuu,"%d",fbb);
          strcat(ar3,uuu);
          fp=fopen(ar3,"r");
       }
       fbb--;
       strcpy(ar3,ar2);
       strcat(ar3,".");
       sprintf(uuu,"%d",fbb);
       strcat(ar3,uuu);
       fp=fopen(ar3,"r");
       for(i=1;i<=yokomax;i++){
           for(j=1;j<=tatemax;j++){
              cch=fgetc(fp);
              if(cch=='_') data[j][i]=0;
              if(cch=='Q'){ data[j][i]=100; box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,5); nuri++;}
              if(cch=='x'){ data[j][i]=200; box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,6); nuri++;}
           }
           cch=fgetc(fp);
       }
       fclose(fp);
       if(nuri==tatemax*yokomax) notimesave=1;

       if(argc<2) strcpy(filet,test);
       else strcpy(filet,ar2);
       strcat(filet,"2.mt");

       ft = fopen(filet,"r");
       if(ft==NULL){
           printf("ファイル名が %s 失敗\n",filet);
           exit(0);
       }
       fscanf(ft,"%f",&tt1);
       fclose(ft);
       tt1s=(int)tt1;
       oldsec=(tt1s/BYO);

     for(i=1;i<=tatemax;i++) pcheckt3(i);
     for(i=1;i<=yokomax;i++) pchecky3(i);
     if(fincount()==1)  goto FIN;


   }
   else{
      tt1=0.0;
      tt1s=0;
      oldsec=0;
   }

   if(notimesave==0){
       if(argc<2) strcpy(filet,test);
       else strcpy(filet,ar2);
       strcat(filet,"3.mt");

       ft = fopen(filet,"r");
       if(ft==NULL){
           kaime=0;
       }
       else{
          fscanf(ft,"%8ld",&kaime);
          fclose(ft);
       }

       kaime++; 

       ft = fopen(filet,"w");
       if(ft==NULL){
           printf("ファイル名が %s 失敗\n",filet);
           exit(0);
       }
       fprintf(ft,"%8ld",kaime);
       fclose(ft);

       if(argc<2) strcpy(filek,test);
       else strcpy(filek,ar2);
       strcat(filek,"m.karte");

       ft = fopen(filek,"a");
       if(ft==NULL){
           printf("ファイル名が %s 失敗\n",filek);
           exit(0);
       }
       fprintf(ft,"\n第%02ld回目: プログラム名=%s: 問題ファイル=%s\n",kaime,argv[0],argv[1]);
      time(&t);
      tmp = localtime(&t);
      fprintf(ft,"開始時刻：%d年%02d月%02d日 (%s) %02d時%02d分%02d秒\n",
        1900 + tmp->tm_year, tmp->tm_mon+1, tmp->tm_mday,
        wd[tmp->tm_wday],tmp->tm_hour,tmp->tm_min,tmp->tm_sec);
      fprintf(ft,"サイズは横%dx縦%d　　打ち切りタイム=%d秒\n",yokomax,tatemax,speed);
      fprintf(ft,"タイトルは「%s」\n",msg);


       fclose(ft);
   }
   else{

       if(argc<2) strcpy(filek,test);
       else strcpy(filek,ar2);
       strcat(filek,"m.karte");

       ft = fopen(filek,"a");
       if(ft==NULL){
           printf("ファイル名が %s 失敗\n",filek);
           exit(0);
       }
      time(&t);
      tmp = localtime(&t);
      fprintf(ft,"\n閲覧時刻：%d年%02d月%02d日 (%s) %02d時%02d分%02d秒\n",
        1900 + tmp->tm_year, tmp->tm_mon+1, tmp->tm_mday,
        wd[tmp->tm_wday],tmp->tm_hour,tmp->tm_min,tmp->tm_sec);
      fprintf(ft,"サイズは横%dx縦%d　　打ち切りタイム=%d秒\n",yokomax,tatemax,speed);
      fprintf(ft,"タイトルは「%s」\n",msg);


       fclose(ft);
   }

   gettime();
   pt1s=getsec-st1s+tt1s;
   pt1u=getusec-st1u;
   if(pt1u<0){
      pt1u+=1000000;
      pt1s--;
   }
   mapflg=0;

   for(i=0;i<=kk;i++){
      ffts[i]=00;
      ffys[i]=00;
      fftu[i]=0;
      ffyu[i]=0;
   }

REPEAT:

   point1x();
   point2x();
   point3();
   point4a();
   maperr=0;

   if(fincount()==1)  goto FIN;

if(speed==5){
/* 
   esfs=0;
   esfu=240000;
   TT10=12;
   mainz();
   if(fincount()==1)  goto FIN;
*/
   esfs=0;
   esfu=280000;
   TT10=14;
   mainz();
   if(fincount()==1)  goto FIN;

   esfs=0;
   esfu=520000;
   TT10=12;
   mainz();
   if(fincount()==1)  goto FIN;
/*
   esfs=0;
   esfu=940000;
   TT10=10;
   mainz();
   if(fincount()==1)  goto FIN;

   esfs=1;
   esfu=700000;
   TT10=10;
   mainz();
   if(fincount()==1)  goto FIN;

   esfs=3;
   esfu=200000;
   TT10=10;
   mainz();
   if(fincount()==1)  goto FIN;
   if(maperr==1) goto FIN;

   esfs=6;
   esfu=500000;
   TT10=10;
   mainz();
   if(fincount()==1)  goto FIN;
   if(tatemax<=55&&yokomax<=55) goto DO_KATEI;

   esfs=13;
   esfu=000000;
   TT10=7;
   mainz();
   if(fincount()==1)  goto FIN;

   esfs=20;
   esfu=000000;
   TT10=7;
   mainz();
   if(fincount()==1)  goto FIN;
   if(tatemax<=65&&yokomax<=65) goto DO_KATEI;
 
   esfs=40;
   esfu=0;
   TT10=7;
   mainz();
   if(fincount()==1)  goto FIN;

   esfs=60;
   esfu=0;
   TT10=7;
   mainz();

   if(fincount()==1)  goto FIN;
   esfs=80;
   esfu=0;
   TT10=7;
   mainz();

   if(fincount()==1)  goto FIN;
   esfs=100;
   esfu=0;
   TT10=7;
   mainz();
   if(fincount()==1)  goto FIN;
*/
}
else{
   esfs=speed;
   esfu=0;
   TT10=7;
   mainz();
   if(fincount()==1)  goto FIN;
}

 
DO_KATEI:
 /*
   for(i=1;i<=yokomax;i++){
      if(iy[i][KFIN]==00) printi('y',i);
   }
   for(i=1;i<=tatemax;i++){
      if(it[i][KFIN]==00) printi('t',i);
   }
*/

   tynuri=tatemax*yokomax-nuri;
   startbb=lastbb=gcdatabb=gc2bb=infobb=backboard_create();
   startcc=lastcc=gcdatacc=gc2cc=infocc=backboard_create();
   startbb->no=0;
   startbb->jotai=100;
   movedata(startbb->data_black,data,startbb->ht_black,ht,startbb->hy_black,hy,startbb->it_black,it,startbb->iy_black,iy);
   movedata(startbb->data_white,data,startbb->ht_white,ht,startbb->hy_white,hy,startbb->it_white,it,startbb->iy_white,iy);
   movedata2(startbb->sst_black,sst,startbb->ssy_black,ssy,startbb->eet_black,eet,startbb->eey_black,eey);
   movedata2(startbb->sst_white,sst,startbb->ssy_white,ssy,startbb->eet_white,eet,startbb->eey_white,eey);

   if(tatemax*yokomax-nuri<50){
        mapflg=1;
   g_rgb(0x0000ff);
   g_text(20,20,"--nokori 50--");
      nokori20();
      mapflg=0;
      if(fincount()==1)  goto FIN;
   }

      if(tatemax>380||yokomax>380) goto FIN;
      mapflg=1;
      katei1();
      if(fincount()==1)  goto FIN;
  
   i=katei3all();
      if(i==10)  goto FIN;
     if(fincount()==1)  goto FIN;
 
     mapflg=1;
      katei2();
      if(fincount()==1)  goto FIN;

   g_rgb(0xffffff);
   g_fill(0,0,230,20);
   g_rgb(0x0000ff);
   g_text(20,20,"--nokori 30000--");
      nokori20();
      mapflg=0;
      if(fincount()==1)  goto FIN;
 
FIN:
   /*printi('y',14);*/
/*
   for(i=1;i<=yokomax;i++){
      if(iy[i][KFIN]==00) printi('y',i);
   }
   for(i=1;i<=tatemax;i++){
      if(it[i][KFIN]==00) printi('t',i);
   }
*/
   mapflg=0;

   g_rgb(0xffffff);
   g_fill(0,0,230,30);

   if(notimesave==1&&tt1s>0){ pt1s=tt1s; pt1u=0;}
   else{
      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }
   }


   sprintf(sss,"TIME=%4ld.%06ld(sec)",pt1s,pt1u);
   g_rgb(0xffffff); g_fill(180,0,140,13);
   g_rgb(0xff0000); g_text(200,13,sss);
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);
  

   if(argc<2) strcpy(filet,test);
   else strcpy(filet,ar2);
   strcat(filet,"1.mt");

   if(notimesave==0){
      ft = fopen(filet,"w");
      if(ft==NULL){
         printf("ファイル名が %s 失敗\n",filet);
         exit(0);
      }
      fprintf(ft,"%4ld.%06ld",pt1s,pt1u);
      fclose(ft);
   }

   fincount();
   if(scount == tatemax+yokomax){
      /* printf("完全燃焼！\n"); */
      g_rgb(0x0000ff);
      g_text(20,20,"This Result is Very Good !");
      if(pt1s>=15){
         oldsec=nowsec=(int)(pt1s/BYO)+1;
         if(notimesave==0) mno_save1();
      }
   }
   else{
      /* printf("不完全燃焼\n"); */
      g_rgb(0xff0000);
      g_text(20,20,"This Result is Bad Result.");

         oldsec=nowsec=(int)(pt1s/BYO);
         if(oldsec==0) oldsec=nowsec=1;
         mno_save1();

   }
       if(argc<2) strcpy(filek,test);
       else strcpy(filek,ar2);
       strcat(filek,"m.karte");

       ft = fopen(filek,"a");
       if(ft==NULL){
           printf("ファイル名が %s 失敗\n",filek);
           exit(0);
       }
    if(pt1s<10)    fprintf(ft,"解析タイム=%4ld.%06ld秒　　dot=%ld",pt1s,pt1u,nuri);
   
   fincount();
   if(scount == tatemax+yokomax)
       fprintf(ft,"    解析成功！\n");
   else
       fprintf(ft,"    解析失敗！\n");

      fclose(ft);

          nuri=0;
            for(i=1;i<=yokomax;i++){
                for(j=1;j<=tatemax;j++){
                      if(data[j][i] == 0  ) box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,18);
                      if(data[j][i] == 100){ box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,5);nuri++;}
                      if(data[j][i] == 200){ box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,6);nuri++;}
                   
                }
             }
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);



   while(1){
      hantei();
   }
}

void mainz(){
   int i,j,k,l,m,n;

   if(maperr==1) return;
   f2flg=0;
 
    for(i=0;i<=kk;i++){
      newt[i]=100;
      newy[i]=100;
      newt2[i]=100;
      newy2[i]=100;
      newt3[i]=100;
      newy3[i]=100;
      if(ffts[i]>esfs||(ffts[i]==esfs&&fftu[i]>esfu)){
         ffts[i]=fftu[i]=0;
      }
      if(ffys[i]>esfs||(ffys[i]==esfs&&ffyu[i]>esfu)){
         ffys[i]=ffyu[i]=0;
      }

   }

   /*eflag6=0;*/
   newz2();
   eflag=2;
   while(eflag>0){

      eflag=0;
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);

USKIP0:
// 0000

   eflag5=2;
   eflag6=0;
   while(eflag5){
M201:
      eflag5=0;
      gettime(); 
      st4s=getsec;
      st4u=getusec;
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }
   nowvsec=pt1s;
   if(oldvsec!=nowvsec){
      oldvsec=nowvsec;
      sprintf(sss,"TIME=%4ld.%06ld(sec)",pt1s,pt1u);
      g_rgb(0xffffff); g_fill(180,0,140,13);
      g_rgb(0xff0000); g_text(200,13,sss);
      sprintf(sss,"loop=%d",loop1);
      g_rgb(0xffffff); g_fill(700,0,240,13);
      g_rgb(0x0000ff); g_text(720,13,sss);
      sprintf(sss,"fas=%3ld",fasi);
      g_rgb(0xffffff); g_fill(918,0,100,13);
      g_rgb(0x0000ff); g_text(920,13,sss);
      sprintf(sss,"TYPE-S %d",jcnt);
      g_rgb(0xffffff); g_fill(938,13,100,13);
      g_rgb(0x0000ff); g_text(940,26,sss);
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);
   }

   eflag5=2;
   while(eflag5){
M2011:
   eflag5=0;

   for(i=1;i<=yokomax;i++){
      pchecky2(i);
      qchecky2(i);
      if(iy[i][KFIN]==0&&newy3[i]==100){
         lse(i,'y');
         newy3[i]=40;
         for(j=kmin;j<=kmax;j++){
            sum1iy( i,j,j,ssy[i][j],eey[i][j]);
            batu1iy(i,j,j,ssy[i][j],eey[i][j]);
         }
      }
   }
   for(i=1;i<=tatemax;i++){
      pcheckt2(i);
      qcheckt2(i);
      if(it[i][KFIN]==0&&newt3[i]==100){
         lse(i,'t');
         newt3[i]=40;
         for(j=kmin;j<=kmax;j++){
            sum1it( i,j,j,sst[i][j],eet[i][j]);
            batu1it(i,j,j,sst[i][j],eet[i][j]);
         }
      }
   }
 }

 
/* 2-00a*/
//M201:
M2014:
      if(fincount()==1) return;


   newz2();
   newf=1;

   j=0;
   info=start;
   while(info&&j<500){
      if(info->k<=TT10){
         if(info->ty=='t') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffts[info->i],fftu[info->i],info->k);
         if(info->ty=='y') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffys[info->i],ffyu[info->i],info->k);
         g_rgb(0xcc0033); g_text(855,80+j*10,sss);
      }
      eflag2=0;
      fasj=j;
      if(info->ty=='t'&&info->k<=TT10){ uucheckt(info->i); if(maperr==1) return;}
      if(info->ty=='y'&&info->k<=TT10){ uuchecky(info->i); if(maperr==1) return;}
      if(eflag2>0&&info->k<=TT10){
         g_rgb(0x00cc33);
         sprintf(sss," + %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      else if(eflag2==0&&info->k<=TT10){
         g_rgb(0x999933);
         sprintf(sss,"   %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      j++;
      info=info->next;
   }
   if(eflag!=0) goto USKIPP;

 /* 2-02a*/

   newz2();
   newf=1;

   j=0;
   info=start;
     
   while(info&&j<500){
         if(j>S60){
            goto M201;
         }
         if(info->ty=='t') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffts[info->i],fftu[info->i],info->k);
         if(info->ty=='y') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffys[info->i],ffyu[info->i],info->k);
      g_rgb(0xcc0033); g_text(855,80+j*10,sss);
      eflag2=0;
      fasj=j;
      if(info->ty=='t'){ uucheckt(info->i); if(maperr==1) return;}
      if(info->ty=='y'){ uuchecky(info->i); if(maperr==1) return;}
      if(eflag2>0){
         g_rgb(0x00cc33);
         sprintf(sss," + %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      else if(eflag2==0){
         g_rgb(0x999933);
         sprintf(sss," %% %ld",nuri);
         g_text(972,80+j*10,sss);
          if(esfs<pt4s||(esfs==pt4s&&esfu<pt4u)){
               g_rgb(0xff8800);
               g_text(972,80+j*10," @");
          }
      }
      j++;
      info=info->next;
   }
   if(eflag>0) goto USKIPP;

      ccheckt();
      if(fincount()==1) return;
      cchecky();
      if(fincount()==1) return;

      for(j=1;j<=yokomax;j++){
           if(newy[j]==50) newy[j]=100;
           if(newy[j]==100) newy2[j]=100;
      }  
      for(j=1;j<=tatemax;j++){
           if(newt[j]==50) newt[j]=100;
           if(newt[j]==100) newt2[j]=100;
     }
      if(fincount()==1) return;

      for(j=1;j<=yokomax;j++){
         newy3[j]=100;
      }  
      for(j=1;j<=tatemax;j++){
         newt3[j]=100;
      }

   /*2-1*/ jcnt++;

M21:
      if(fincount()==1) return;

      gettime(); 
      st4s=getsec;
      st4u=getusec;
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }
   nowvsec=pt1s;
   if(oldvsec!=nowvsec){
      oldvsec=nowvsec;
      sprintf(sss,"TIME=%4ld.%06ld(sec)",pt1s,pt1u);
      g_rgb(0xffffff); g_fill(180,0,140,13);
      g_rgb(0xff0000); g_text(200,13,sss);
      sprintf(sss,"loop=%d",loop1);
      g_rgb(0xffffff); g_fill(700,0,240,13);
      g_rgb(0x0000ff); g_text(720,13,sss);
      sprintf(sss,"fas=%3ld",fasi);
      g_rgb(0xffffff); g_fill(918,0,100,13);
      g_rgb(0x0000ff); g_text(920,13,sss);
      sprintf(sss,"TYPE-A %d",jcnt);
      g_rgb(0xffffff); g_fill(938,13,100,13);
      g_rgb(0x0000ff); g_text(940,26,sss);
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);
   }

   eflag5=2;
   while(eflag5){
   eflag5=0;
   for(i=1;i<=yokomax;i++){
      pchecky2(i);
      qchecky2(i);
      if(iy[i][KFIN]==0&&newy3[i]==100){
         lse(i,'y');
         newy3[i]=40;
         for(j=kmin;j<=kmax;j++){
            sum1iy( i,j,j,ssy[i][j],eey[i][j]);
            batu1iy(i,j,j,ssy[i][j],eey[i][j]);
         }
      }
   }
   for(i=1;i<=tatemax;i++){
      pcheckt2(i);
      qcheckt2(i);
      if(it[i][KFIN]==0&&newt3[i]==100){
         lse(i,'t');
         newt3[i]=40;
         for(j=kmin;j<=kmax;j++){
            sum1it( i,j,j,sst[i][j],eet[i][j]);
            batu1it(i,j,j,sst[i][j],eet[i][j]);
         }
      }
   }
 }

/* 2-1*/

   newz2();
   newf=1;

   j=0;
   info=start;
   while(info&&j<500){
      if(info->k<=TT10){
         if(info->ty=='t') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffts[info->i],fftu[info->i],info->k);
         if(info->ty=='y') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffys[info->i],ffyu[info->i],info->k);
         g_rgb(0xcc0033); g_text(855,80+j*10,sss);
      }
      eflag2=0;
      fasj=j;
      if(info->ty=='t'&&info->k<=TT10){ uuacheckt(info->i);if(maperr==1) return;}
      if(info->ty=='y'&&info->k<=TT10){ uuachecky(info->i);if(maperr==1) return;}
      if(eflag2>0&&info->k<=TT10){
         g_rgb(0x00cc33);
         sprintf(sss," + %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      else if(eflag2==0&&info->k<=TT10){
         g_rgb(0x999933);
         sprintf(sss,"   %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      j++;
      info=info->next;
   }
   if(eflag>100) goto USKIPP;

 /* 2-2*/

   newz2();
   newf=1;

   j=0;
   info=start;
     
   while(info&&j<500&&eflag<=TT25){
         if(j>S40){
            goto M21;
         }
         if(info->ty=='t') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffts[info->i],fftu[info->i],info->k);
         if(info->ty=='y') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffys[info->i],ffyu[info->i],info->k);
      g_rgb(0xcc0033); g_text(855,80+j*10,sss);
      eflag2=0;
      fasj=j;
      if(info->ty=='t'){ uuacheckt(info->i);if(maperr==1) return;}
      if(info->ty=='y'){ uuachecky(info->i);if(maperr==1) return;}
      if(eflag2>0){
         g_rgb(0x00cc33);
         sprintf(sss," + %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      else if(eflag2==0){
         g_rgb(0x999933);
         sprintf(sss," %% %ld",nuri);
         g_text(972,80+j*10,sss);
          if(esfs<pt4s||(esfs==pt4s&&esfu<pt4u)){
               g_rgb(0xff8800);
               g_text(972,80+j*10," @");
          }
      }
      j++;
      info=info->next;
   }
   if(eflag>0) goto USKIPP;

      ccheckt();
      if(fincount()==1) return;
      cchecky();
      if(fincount()==1) return;

      

  }

/* 2-4*/
USKIP:
      if(fincount()==1) return;

      for(j=1;j<=yokomax;j++){
           if(newy[j]==50) newy[j]=100;
           if(newy[j]==100) newy2[j]=100;
      }  
      for(j=1;j<=tatemax;j++){
           if(newt[j]==50) newt[j]=100;
           if(newt[j]==100) newt2[j]=100;
     }
      if(fincount()==1) return;

      for(j=1;j<=yokomax;j++){
         newy3[j]=100;
      }  
      for(j=1;j<=tatemax;j++){
         newt3[j]=100;
      }

 

  /*2-11*/
   eflag5=2;
   while(eflag5){
M211:
      eflag5=0;

      gettime(); 
      st4s=getsec;
      st4u=getusec;
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }
   nowvsec=pt1s;
   if(oldvsec!=nowvsec){
      oldvsec=nowvsec;
      sprintf(sss,"TIME=%4ld.%06ld(sec)",pt1s,pt1u);
      g_rgb(0xffffff); g_fill(180,0,140,13);
      g_rgb(0xff0000); g_text(200,13,sss);
      sprintf(sss,"loop=%d",loop1);
      g_rgb(0xffffff); g_fill(700,0,240,13);
      g_rgb(0x0000ff); g_text(720,13,sss);
      sprintf(sss,"fas=%3ld",fasi);
      g_rgb(0xffffff); g_fill(918,0,100,13);
      g_rgb(0x0000ff); g_text(920,13,sss);
      sprintf(sss,"TYPE-B %d",jcnt);
      g_rgb(0xffffff); g_fill(938,13,100,13);
      g_rgb(0x0000ff); g_text(940,26,sss);
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);
   }

   eflag5=2;
   while(eflag5){

    eflag5=0;
    for(i=1;i<=yokomax;i++){
      pchecky2(i);
      qchecky2(i);
      if(iy[i][KFIN]==0&&newy3[i]==100){
         lse(i,'y');
         newy3[i]=40;
         for(j=kmin;j<=kmax;j++){
            sum1iy( i,j,j,ssy[i][j],eey[i][j]);
            batu1iy(i,j,j,ssy[i][j],eey[i][j]);
         }
      }
   }
   for(i=1;i<=tatemax;i++){
      pcheckt2(i);
      qcheckt2(i);
      if(it[i][KFIN]==0&&newt3[i]==100){
         lse(i,'t');
         newt3[i]=40;
         for(j=kmin;j<=kmax;j++){
            sum1it( i,j,j,sst[i][j],eet[i][j]);
            batu1it(i,j,j,sst[i][j],eet[i][j]);
         }
      }
   }
 }

      newz2();
      newf=1;

   j=0;
   info=start;
   while(info&&j<500){
      if(info->k<=TT10){
         if(info->ty=='t') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffts[info->i],fftu[info->i],info->k);
         if(info->ty=='y') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffys[info->i],ffyu[info->i],info->k);
         g_rgb(0xcc0033); g_text(855,80+j*10,sss);
      }
      eflag2=0;
      fasj=j;
      if(info->ty=='t'&&info->k<=TT10){ uu0checkt(info->i);if(maperr==1) return;}
      if(info->ty=='y'&&info->k<=TT10){ uu0checky(info->i);if(maperr==1) return;}
      if(eflag2>0&&info->k<=TT10){
         g_rgb(0x00cc33);
         sprintf(sss," + %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      else if(eflag2==0&&info->k<=TT10){
         g_rgb(0x999933);
         sprintf(sss,"   %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      j++;
      info=info->next;
   }

/* 2-12*/

   newz2();
   newf=1;

   j=0;
   info=start;
     
   while(info&&j<500&&eflag<=TT20){
         if(j>S40){
            goto M211;
         }

         if(info->ty=='t') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffts[info->i],fftu[info->i],info->k);
         if(info->ty=='y') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffys[info->i],ffyu[info->i],info->k);
      g_rgb(0xcc0033); g_text(855,80+j*10,sss);
      eflag2=0;
      fasj=j;
      if(info->ty=='t'){ uu0checkt(info->i);if(maperr==1) return;}
      if(info->ty=='y'){ uu0checky(info->i);if(maperr==1) return;}
      if(eflag2>0){
         g_rgb(0x00cc33);
         sprintf(sss," + %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      else if(eflag2==0){
         g_rgb(0x999933);
         sprintf(sss," %% %ld",nuri);
         g_text(972,80+j*10,sss);
          if(esfs<pt4s||(esfs==pt4s&&esfu<pt4u)){
               g_rgb(0xff8800);
               g_text(972,80+j*10," @");
          }
      }
      j++;
      info=info->next;
   }

       if(eflag5<=TT5)  return;
 }
/* 2-14*/
USKIPP:
  
   
      if(fincount()==1) return;

      for(j=1;j<=yokomax;j++){
         if(newy[j]==50) newy[j]=100;
      }  
      for(j=1;j<=tatemax;j++){
         if(newt[j]==50) newt[j]=100;
      }

      if(fincount()==1) return;
      if(maperr==1) return;
      ccheckt();
      if(fincount()==1) return;
      if(maperr==1) return;
      cchecky();
      if(fincount()==1) return;
      if(maperr==1) return;


      v2it();
      if(fincount()==1) return;
      if(maperr==1) return;
      v2iy();

      if(fincount()==1) return;
      if(maperr==1) return;
       f2flg=1;
      loop1++; 
/*
   pchecky2(14);
   if(hy[14][1]!=255) printi('y',14);
*/
   }
}

void mainy(){
   int i,j,k,l,m,n;

   f2flg=0;
    for(i=0;i<=kk;i++){
      newt[i]=100;
      newy[i]=100;
      newt2[i]=100;
      newy2[i]=100;
      newt3[i]=100;
      newy3[i]=100;
      if(ffts[i]>esfs||(ffts[i]==esfs&&fftu[i]>esfu)){
         ffts[i]=fftu[i]=0;
      }
      if(ffys[i]>esfs||(ffys[i]==esfs&&ffyu[i]>esfu)){
         ffys[i]=ffyu[i]=0;
      }

   }

   /*eflag6=0;*/
   newz2();
   eflag=2;
   while(eflag>0){

      eflag=0;
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);


// 0000

   eflag5=2;
   eflag6=0;
   while(eflag5){
M201Y:
      eflag5=0;
      gettime(); 
      st4s=getsec;
      st4u=getusec;
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }
   nowvsec=pt1s;
   if(oldvsec!=nowvsec){
      oldvsec=nowvsec;
      sprintf(sss,"TIME=%4ld.%06ld(sec)",pt1s,pt1u);
      g_rgb(0xffffff); g_fill(180,0,140,13);
      g_rgb(0xff0000); g_text(200,13,sss);
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);
      sprintf(sss,"loop=%d",loop1);
      g_rgb(0xffffff); g_fill(700,0,240,13);
      g_rgb(0x0000ff); g_text(720,13,sss);
      sprintf(sss,"fas=%3ld",fasi);
      g_rgb(0xffffff); g_fill(918,0,100,13);
      g_rgb(0x0000ff); g_text(920,13,sss);
      sprintf(sss,"TYPE-K %d",jcnt);
      g_rgb(0xffffff); g_fill(938,13,100,13);
      g_rgb(0x0000ff); g_text(940,26,sss);
   }
  
/* 2-00a*/
//M201:
M2014Y:
      if(fincount()==1) return;


   newz2();
   newf=1;

   j=0;
   info=start;
   while(info&&j<500){
      if(info->k<=TT10){
         if(info->ty=='t') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffts[info->i],fftu[info->i],info->k);
         if(info->ty=='y') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffys[info->i],ffyu[info->i],info->k);
         g_rgb(0xcc0033); g_text(855,80+j*10,sss);
      }
      eflag2=0;
      fasj=j;
      if(info->ty=='t'&&info->k<=TT10){ uu0checkt(info->i);if(maperr==1) return; }
      if(info->ty=='y'&&info->k<=TT10){ uu0checky(info->i);if(maperr==1) return; }
      if(eflag2>0&&info->k<=TT10){
         g_rgb(0x00cc33);
         sprintf(sss," + %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      else if(eflag2==0&&info->k<=TT10){
         g_rgb(0x999933);
         sprintf(sss,"   %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      j++;
      info=info->next;
   }
   if(eflag!=0) goto USKIPPY;

 /* 2-02a*/

   newz2();
   newf=1;

   j=0;
   info=start;
     
   while(info&&j<500){
         if(j>S60){
            goto M201Y;
         }
         if(info->ty=='t') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffts[info->i],fftu[info->i],info->k);
         if(info->ty=='y') sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffys[info->i],ffyu[info->i],info->k);
      g_rgb(0xcc0033); g_text(855,80+j*10,sss);
      eflag2=0;
      fasj=j;
      if(info->ty=='t'){ uu0checkt(info->i);if(maperr==1) return; }
      if(info->ty=='y'){ uu0checky(info->i);if(maperr==1) return; }
      if(eflag2>0){
         g_rgb(0x00cc33);
         sprintf(sss," + %ld",nuri);
         g_text(972,80+j*10,sss);
      }
      else if(eflag2==0){
         g_rgb(0x999933);
         sprintf(sss," %% %ld",nuri);
         g_text(972,80+j*10,sss);
          if(esfs<pt4s||(esfs==pt4s&&esfu<pt4u)){
               g_rgb(0xff8800);
               g_text(972,80+j*10," @");
          }
      }
      j++;
      info=info->next;
   }
 }
 
USKIPPY:
  
 
      if(fincount()==1) return;

      ccheckt();
      if(fincount()==1) return;
      cchecky();
      if(fincount()==1) return;

      scheckt();
      if(fincount()==1) return;
      schecky();
      if(fincount()==1) return;

/*
      bcheckt();
      if(fincount()==1) return;
      bchecky();
      if(fincount()==1) return;
*/
      v2it();
      v2iy();

      if(fincount()==1) return;
       f2flg=1;
      loop1++; 
/*
   pchecky2(14);
   if(hy[14][1]!=255) printi('y',14);
*/
        
   }
}
 
      

  


 
void newz2(){
   int i,k1,s1,p,im=0,in=0;
   struct line *karistt,*karilast;
/*
   info=start;
   while(info){
      if(info->ty=='t') ffts[info->i]=info->fas;
      if(info->ty=='y') ffys[info->i]=info->fas;
      if(info->ty=='t') fftu[info->i]=info->fau;
      if(info->ty=='y') ffyu[info->i]=info->fau;
      info=info->next;
   }
*/
   gcdata=NULL;
   if(start){
      info=start;
      while(info->next){
         temp=info->next;
         free(info);
         info=temp;
      }
   }
   start=NULL;

   gcdata2=NULL;
   if(start2){
      info2=start2;
      while(info2->next){
         temp2=info2->next;
         free(info2);
         info2=temp2;
      }
   }
   start2=NULL;

   for(i=1;i<=tatemax;i++){
      pcheckt2(i);
      qcheckt2(i);
      if(it[i][KFIN]==0){
         lse(i,'t');
         k1=kmax-kmin+1;

         if(newt2[i]==100&&k1>0){
	    if(im==0){
		start=stt=gcdata=node_create();
                im++;
                gcdata->fas=ffts[i];
                gcdata->fau=fftu[i];
                gcdata->ty='t';
                gcdata->k=k1;
                gcdata->i=i;
            }
            else{
	        gcdata->next=node_create();
         	gcdata=gcdata->next;
                gcdata->fas=ffts[i];
                gcdata->fau=fftu[i];
                gcdata->ty='t';
                gcdata->k=k1;
                gcdata->i=i;
  	    }
	 }
  
      }
   }

   for(i=1;i<=yokomax;i++){
      pchecky2(i);
      qchecky2(i);
      if(iy[i][KFIN]==0){
         lse(i,'y');
         k1=kmax-kmin+1;
 
         if(newy2[i]==100&&k1>0){
	    if(im==0){
		start=stt=gcdata=node_create();
                im++;
                gcdata->fas=ffys[i];
                gcdata->fau=ffyu[i];
                gcdata->ty='y';
                gcdata->k=k1;
                gcdata->i=i;
            }
            else{
	        gcdata->next=node_create();
         	gcdata=gcdata->next;
                gcdata->fas=ffys[i];
                gcdata->fau=ffyu[i];
                gcdata->ty='y';
                gcdata->k=k1;
                gcdata->i=i;
  	    }
	 }
  
      }
   }

/* 昇順 */

   stt=start;
   info=start;
   last=NULL;
   im=0;
   while(info){
      start     =info->next;
      info->next=NULL;
      stt       =shojun(info);
      info      =start;
   }
   start=stt;

if(mapflg==0){
   g_rgb(0xffffff); g_fill(850,70,200,500);

   sprintf(sss,"b)esf=%3ld.%06ld",esfs,esfu);
   g_rgb(0xffffff); g_fill(850,38,160,13);
   g_rgb(0x0000ff); g_text(855,50,sss);

   info=start;
   im=0;
   while(info){
         if(info->ty=='t'){
             sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffts[info->i],fftu[info->i],info->k);
            g_rgb(0x0000ff); g_text(855,80+im*10,sss);
            im++;
         }
         if(info->ty=='y'){ 
             sprintf(sss,"%c %03d %3ld.%06ld %3d",info->ty,info->i,ffys[info->i],ffyu[info->i],info->k);
            g_rgb(0x0000ff); g_text(855,80+im*10,sss);
            im++;
         }
      
      info=info->next;
   }
   fasi=im;
  }
}


int asc11(char a){
   if('0'<=a&&a<='9') return a-'0';
   else if('A'<=a&&a<='F') return a-'A'+10;
   else if('a'<=a&&a<='f') return a-'a'+10;
}

void gettime(){
   struct timeval tv;
   gettimeofday(&tv,NULL);
   getsec=tv.tv_sec;
   getusec=tv.tv_usec;
}

static char chr_1[15]={
               0, 2, 0,
               2, 2, 0,
               0, 2, 0,
               0, 2, 0,
               0, 2, 0  };

static char chr_2[15]={
               2, 2, 2,
               0, 0, 2,
               2, 2, 2,
               2, 0, 0,
               2, 2, 2  };

static char chr_3[15]={
               2, 2, 2,
               0, 0, 2,
               2, 2, 2,
               0, 0, 2,
               2, 2, 2  };

static char chr_4[15]={
               2, 0, 2,
               2, 0, 2,
               2, 2, 2,
               0, 0, 2,
               0, 0, 2  };

static char chr_5[15]={
               2, 2, 2,
               2, 0, 0,
               2, 2, 2,
               0, 0, 2,
               2, 2, 2  };

static char chr_6[15]={
               2, 2, 2,
               2, 0, 0,
               2, 2, 2,
               2, 0, 2,
               2, 2, 2  };

static char chr_7[15]={
               2, 2, 2,
               2, 0, 2,
               0, 0, 2,
               0, 0, 2,
               0, 0, 2  };

static char chr_8[15]={
               2, 2, 2,
               2, 0, 2,
               2, 2, 2,
               2, 0, 2,
               2, 2, 2  };

static char chr_9[15]={
               2, 2, 2,
               2, 0, 2,
               2, 2, 2,
               0, 0, 2,
               2, 2, 2  };

static char chr_0[15]={
               2, 2, 2,
               2, 0, 2,
               2, 0, 2,
               2, 0, 2,
               2, 2, 2  };


void g_dot(int x, int y){
  XDrawLine(dpy,win,gc,x,y,x,y);
  XFlush(dpy);
}

void g_text(int x, int y,char *str){
  XDrawString(dpy,win,gc,x,y,str,strlen(str));
  XFlush(dpy);
}

void g_line(int x0, int y0, int x1, int y1){
  XDrawLine(dpy,win,gc,x0,y0,x1,y1);
  XFlush(dpy);
}

void g_rgb(long iro){
  XColor xc;

  xc.red = (iro&0xff0000)/256;
  xc.green = (iro&0x00ff00); 
  xc.blue = (iro&0x0000ff)*256;
  XAllocColor(dpy,DefaultColormap(dpy,screen),&xc);
  XSetForeground(dpy,gc,xc.pixel);
  XFlush(dpy);
}

void g_fill(int x0,int y0, int wid, int hei){
  XFillRectangle(dpy,win,gc,x0,y0,wid, hei);
  XFlush(dpy);
}

void g_box(int x0, int y0, int wid, int hei){
  XDrawRectangle(dpy,win,gc,x0,y0,wid, hei);
  XFlush(dpy);
}

void g_clear(){
  g_rgb(0xffffff);
  XFillRectangle(dpy,win,gc,0,0,win_width, win_height);  
  g_rgb(0x000000);
  XFlush(dpy);
}

void first(){
 
   dpy = XOpenDisplay( NULL );    /* Xサーバに接続する */
   screen = DefaultScreen( dpy ); /* スクリーン設定 */
   win = XCreateSimpleWindow(     /* ウィンドウを開く */
         dpy,                     /* Xサーバ */
         RootWindow(dpy,screen),  /* 親ウィンドウ */
         0, 0,                    /* 表示時の左上隅の座標 x, y */
         win_width, win_height,   /* ウィンドウの幅と高さ */
         1, BlackPixel(dpy,screen),/* ボーダーの幅と色 */
         WhitePixel(dpy,screen)    /* ウィンドウの背景色 */
        );
   XSelectInput( dpy, win, ExposureMask|KeyPressMask|StructureNotifyMask);
   XMapWindow( dpy, win );  /* ウィンドウのマッピング */
 
   gc = DefaultGC( dpy, screen ); /* グラフィックコンテキストの設定 */
   XSetForeground( dpy, gc, BlackPixel(dpy,screen) ); /* 描画色設定 */
 
   atom1 = XInternAtom( dpy, "WM_PROTOCOLS", False );
   atom2 = XInternAtom( dpy, "WM_DELETE_WINDOW", False );
   XSetWMProtocols( dpy, win, &atom2, 1 );
}

void hantei(){
   int i,j;

     XNextEvent( dpy, &event );
     switch( event.type ){
     case Expose:
/*       XDrawLine( dpy, win, gc, 0, 0, win_width, win_height ); /* 線を描く */
/*       XFlush( dpy );  /* バッファのフラッシュ */
       break;
     case ConfigureNotify:
       XGetGeometry( dpy, win, &root,
               &dummy, &dummy, &win_width, &win_height,
               &dummy, &dummy );
/*       XDrawLine( dpy, win, gc, 0, 0, win_width, win_height ); /* 線を描く */
/*       XFlush( dpy );  /* バッファのフラッシュ */
       break;
     case KeyPress:
       key_sym = XKeycodeToKeysym( dpy, event.xkey.keycode, 0 );
       if( key_sym == XK_Escape ){
         XDestroyWindow( dpy, win );
       }
       if( key_sym == XK_Up ){
         XDestroyWindow( dpy, win );
       }
       if( key_sym == XK_Down ){
         XDestroyWindow( dpy, win );
       }
       if( key_sym == XK_Right ){
         XDestroyWindow( dpy, win );
       }
       if( key_sym == XK_Left ){
         XDestroyWindow( dpy, win );
       }
        if(0x20<=key_sym&&key_sym <= 0x7f&&key_sym != 'q'&&key_sym != 'Q'){
            for(i=1;i<=tatemax;i++){
                for(j=1;j<=yokomax;j++){
                   if(data[i][j] == 100) box( (kymax+i)*dot1+20,(ktmax+j)*dot1+30,dot2,5);
                   if(data[i][j] == 200) box( (kymax+i)*dot1+20,(ktmax+j)*dot1+30,dot2,6);
                }
             }

   sprintf(sss,"TIME=%4ld.%06ld(sec)",pt1s,pt1u);
   g_rgb(0xffffff); g_fill(180,0,140,13);
   g_rgb(0xff0000); g_text(200,13,sss);
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);
  
   for(i=1;i<=yokomax;i++){
      for(j=1;j<=iy[i][KKK];j++){
         vmark(i,j,'y',iy[i][j]);
      }
   }

   for(i=1;i<=tatemax;i++){
      for(j=1;j<=it[i][KKK];j++){
         vmark(i,j,'t',it[i][j]);
      }
   }

       }
       if( key_sym == 'q'||key_sym == 'Q' ){
         XDestroyWindow( dpy, win );
       }
       if( key_sym == XK_Tab){
         XDestroyWindow( dpy, win );
       }
      break;
     case ClientMessage:
       if( event.xclient.message_type == atom1 &&
         event.xclient.data.l[0] == atom2 ){
         XDestroyWindow( dpy, win );
       }
       break;
     case DestroyNotify:
       XCloseDisplay( dpy );
       exit(0);
       break;
     default:
       ;
     }
}

void mark(int i, int j, char yt,unsigned char val){
      if(yt == 't') ht[i][j]=val;
      if(yt == 'y') hy[i][j]=val;

   if(yokomax<=25 && tatemax<=40){
      if(yt == 't'&&ht5[i][j]!=val){
            ht[i][j]=val;
            ht5[i][j]=val;
            if(val==1){   pr_10x(it[i][j],(kymax+i)*dot1+23,j*dot1+30  ,1); }
            if(val==5){   pr_10x(it[i][j],(kymax+i)*dot1+23,j*dot1+30  ,2);  }
            if(val==255){ pr_10x(it[i][j],(kymax+i)*dot1+23,j*dot1+30  ,3); }
      }
      if(yt == 'y'&&hy5[i][j]!=val){
            hy[i][j]=val;
            hy5[i][j]=val;
            if(val==1){   pr_10x(iy[i][j],j*dot1+20,(ktmax+i)*dot1+33,1);}
            if(val==5){   pr_10x(iy[i][j],j*dot1+20,(ktmax+i)*dot1+33,2); }
            if(val==255){ pr_10x(iy[i][j],j*dot1+20,(ktmax+i)*dot1+33,3); }
      }
   }
}

void vmark(int i, int j, char yt,int val){

   if(yokomax<=25 && tatemax<=40){
      if(yt == 't'){
            pr_10x(val,(kymax+i)*dot1+23,j*dot1+30       ,3);
      }
      if(yt == 'y'){
            pr_10x(val,j*dot1+20,        (ktmax+i)*dot1+33,3);
      }
   }
}

int map(int i, int l, char yt,int val){

   int da,dflag=0,j,k,m;
   char mes1[24],mes2[24],ss[10];
   char ttt[300],tt2[300],tt3[300];
   FILE *ft;

    if(yt == 't'){
/*
      if(i==27 && l==3 && val==200) while(1) hantei(); 
      if(i==11 && l==21 && val==200) while(1) hantei(); 
*/
       da=data[i][l];
       if(data[i][l]==0){
          newt2[i]=100;
          newy2[l]=100;

          newt3[i]=100;
          newy3[l]=100;
 
          newt[i]=100;
          newy[l]=100;

          oldt[i]=100;
          oldy[l]=100;

          nuri++;
       }
       if(da == 100 && val==200) dflag=1;
       if(da == 200 && val==100) dflag=1;
       if(da ==   0 && val==200){
          eflag++;eflag2++;eflag3++;eflag4++;eflag5++;eflag6++;
       }
       if(da ==   0 && val==100){
          eflag++;eflag2++;eflag3++;eflag4++;eflag5++;eflag6++;
       }
       if(dflag==0){
          data[i][l]=val;
          if(val == 100) box( (kymax+i)*dot1+20,(ktmax+l)*dot1+30,dot2,5);
          if(val == 200) box( (kymax+i)*dot1+20,(ktmax+l)*dot1+30,dot2,6);
       }
       else{
          if(mapflg==1){ maperr=1; return 1;}
          errorbox( (kymax+i)*dot1+20,(ktmax+l)*dot1+30,dot2);

          if(da ==100) strcpy(mes1,"塗りつぶす(Q=100)");
          if(da ==200) strcpy(mes1,"バツ確定(x=200)");
          if(val==100) strcpy(mes2,"塗りつぶす(Q=100)");
          if(val==200) strcpy(mes2,"バツ確定(x=200)");

          printf("データ入力に間違いがないか、もう一度お確かめ下さい\n");
          printf("横が %d 縦が %d で %s から %s になってエラー\n",
                 i,l,mes1,mes2);

      g_rgb(0xffffff);
      g_fill(180,0,430,30);
      g_rgb(0xff0000);
      g_text(20,20,"ERROR !");
      k=iy[l][KKK];
      strcpy(sss,"*y");
      strcpy(tt2,"*y");
      sprintf(ttt,"%03d ",l);
      strcat(sss,ttt);
      strcat(tt2,ttt);
      for(j=1;j<=k;j++){
         if(j==1) sprintf(ttt,"%d",iy[l][j]);
         else     sprintf(ttt,",%d",iy[l][j]);
         strcat(sss,ttt);
         strcat(tt2,ttt);
      }
      k=it[i][KKK];
      strcat(sss,"  *t");
      strcpy(tt3,"*t");
      sprintf(ttt,"%03d ",i);
      strcat(sss,ttt);
      strcat(tt3,ttt);
      for(j=1;j<=k;j++){
         if(j==1) sprintf(ttt,"%d",it[i][j]);
         else     sprintf(ttt,",%d",it[i][j]);
         strcat(sss,ttt);
         strcat(tt3,ttt);
      }
      /* sprintf(sss,"x=%d y=%d %s %s",i,l,mes1,mes2); */
      g_text(200,13,tt2);
      g_text(200,26,tt3);
      strcpy(ttt,sss);

      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }
/*
      sprintf(sss,"TIME=%4.2f(sec)",pt1);
      g_text(200,13,sss);
*/
       if(argc1<2) strcpy(filek,test);
       else strcpy(filek,ar2);
       strcat(filek,"m.karte");

       ft = fopen(filek,"a");
       if(ft==NULL){
           printf("ファイル名が %s 失敗\n",filek);
           exit(0);
       }
      fprintf(ft,"\n解析タイム=%4ld.%06ld秒　　dot=%ld　　打込みミスか？エラーが出ました\n",pt1s,pt1u,nuri);
      fprintf(ft,"%s\n",tt2);
      fprintf(ft,"%s\n",tt3);
      fclose(ft);


           while(1) hantei(); exit(0);
       }
    }
    if(yt == 'y'){
/*  
      if(l==27 && i==3 && val==200) while(1) hantei(); 
      if(i==11 && l==21 && val==200) while(1) hantei(); 
*/
       da=data[l][i];
       if(data[l][i]==0){
          newt2[l]=100;
          newy2[i]=100;
 
          newt3[l]=100;
          newy3[i]=100;
 
          newt[l]=100;
          newy[i]=100;

          oldt[l]=100;
          oldy[i]=100;

          nuri++;
       }
       if(da == 100 && val==200) dflag=1;
       if(da == 200 && val==100) dflag=1;
       if(da ==   0 && val==200){
          eflag++;eflag2++;eflag3++;eflag4++;eflag5++;eflag6++;
       }
       if(da ==   0 && val==100){
          eflag++;eflag2++;eflag3++;eflag4++;eflag5++;eflag6++;
       }
       if(dflag==0){
          data[l][i]=val;
          if(val == 100) box( (kymax+l)*dot1+20,(ktmax+i)*dot1+30,dot2,5);
          if(val == 200) box( (kymax+l)*dot1+20,(ktmax+i)*dot1+30,dot2,6);
       }
       else{
           if(mapflg==1){ maperr=1; return 1;}
           errorbox( (kymax+l)*dot1+20,(ktmax+i)*dot1+30,dot2);

          if(da ==100) strcpy(mes1,"塗りつぶす(Q=100)");
          if(da ==200) strcpy(mes1,"バツ確定(x=200)");
          if(val==100) strcpy(mes2,"塗りつぶす(Q=100)");
          if(val==200) strcpy(mes2,"バツ確定(x=200)");

          printf("データ入力に間違いがないか、もう一度お確かめ下さい\n");
          printf("横が %d 縦が %d で %s から %s になってエラー\n",
                  l,i,mes1,mes2);

      g_rgb(0xffffff);
      g_fill(180,0,430,30);
      g_rgb(0xff0000);
      g_text(20,20,"ERROR !");
      k=iy[i][KKK];
      strcpy(sss,"*y");
      strcpy(tt2,"*y");
      sprintf(ttt,"%03d ",i);
      strcat(sss,ttt);
      strcat(tt2,ttt);
      for(j=1;j<=k;j++){
         if(j==1) sprintf(ttt,"%d",iy[i][j]);
         else     sprintf(ttt,",%d",iy[i][j]);
         strcat(sss,ttt);
         strcat(tt2,ttt);
      }
      k=it[l][KKK];
      strcat(sss,"  *t");
      strcpy(tt3,"*t");
      sprintf(ttt,"%03d ",l);
      strcat(sss,ttt);
      strcat(tt3,ttt);
      for(j=1;j<=k;j++){
         if(j==1) sprintf(ttt,"%d",it[l][j]);
         else     sprintf(ttt,",%d",it[l][j]);
         strcat(sss,ttt);
         strcat(tt3,ttt);
      }
      /* sprintf(sss,"x=%d y=%d %s %s",l,i,mes1,mes2); */
      g_text(200,13,tt2);
      g_text(200,26,tt3);
      strcpy(ttt,sss);

      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }
      if(argc1<2) strcpy(filek,test);
       else strcpy(filek,ar2);
       strcat(filek,"m.karte");

       ft = fopen(filek,"a");
       if(ft==NULL){
           printf("ファイル名が %s 失敗\n",filek);
           exit(0);
       }
      fprintf(ft,"\n解析タイム=%4ld.%06ld秒　　dot=%ld　　打込みミスか？エラーが出ました。\n",pt1s,pt1u,nuri);
      fprintf(ft,"%s\n",tt2);
      fprintf(ft,"%s\n",tt3);
      fclose(ft);
            while(1) hantei(); exit(0);
       }
    }
}

void ktymax(){

   int i;

   ktmax=1;
   for(i=1;i<=tatemax;i++){
      ktmax=max11(it[i][KKK],ktmax);
   }
   kymax=1;
   for(i=1;i<=yokomax;i++){
      kymax=max11(iy[i][KKK],kymax);
   }

}

int fincount(){

   int i,ret;

   scount=ret=0;
   for(i=1;i<=tatemax;i++){
      if(it[i][KFIN] == 100){ scount++;
         box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+2)*dot1+dot1/2+27,5,9);
      }
   }
   for(i=1;i<=yokomax;i++){
      if(iy[i][KFIN] == 100){ scount++;
         box((kymax+tatemax+2)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,9);
       }
   }
   if(scount == tatemax+yokomax)  ret=1;

   return ret;
}

void ksef(int i, char yt){

    if(yt == 't'){
         it[i][KSTART]=999;
         it[i][KEND]  =998;
         it[i][KFIN]  =100;
    }
    if(yt == 'y'){
         iy[i][KSTART]=999;
         iy[i][KEND]  =998;
         iy[i][KFIN]  =100;
    }
}

void sum1it(int i, int kst, int ked, int lst, int led){

   int j,l,s1,e1,sum;

      sum=0;
      for(j=kst;j<=ked;j++){
         sum+=   it[i][j]+1;
      }
      sum--;


      if(sum > led-lst+1){
         printf("データがおかしいんと、ちゃいまっか 縦%d行",i);
         exit(0);
      }
      if(sum == led-lst+1){
         s1=lst;
         for(j=kst;j<=ked;j++){
            e1=s1+it[i][j]-1;
            for(l=s1; l<=e1; l++){
               map(i,l,'t',100);
               if(maperr==1) return;
            }
            s1=e1+2;
         }
         goto SST1;
      }

      s1=lst;
      for(j=kst;j<=ked;j++){
         e1  =s1+it[i][j]-1;
         for(l=s1; l<=e1; l++){
            d[l]=j;
         }
         d[l]=0;
         s1=e1+2;
      }
      for(j=s1;j<=led;j++){
         d[j]=0;
      }

      e1=led;
      for(j=ked;j>=kst;j--){
         s1=e1-it[i][j]+1;
         for(l=s1; l<=e1; l++){
            if(d[l] == j){
               mark(i,j,'t',1);
               map(i,l,'t',100);
               if(maperr==1) return;
            }
         }
         e1=s1-2;
      }
SST1:i=i;

}

void sum1iy(int i, int kst, int ked, int lst, int led){

   int j,l,s1,e1,sum;

      sum=0;
      for(j=kst;j<=ked;j++){
         sum+=   iy[i][j]+1;
      }
      sum--;

      if(sum > led-lst+1){
         printf("データがおかしいんと、ちゃいまっか 横%d行",i);
         exit(0);
      }
      if(sum == led-lst+1){

         s1=lst;
         for(j=kst;j<=ked;j++){
            e1=s1+iy[i][j]-1;
            for(l=s1; l<=e1; l++){
               map(i,l,'y',100);
               if(maperr==1) return;
            }
            s1=e1+2;
         }
         goto SSY1;
      }

      s1=lst;
      for(j=kst;j<=ked;j++){
         e1  =s1+iy[i][j]-1;
         for(l=s1; l<=e1; l++){
            d[l]=j;
         }
         d[l]=0;
         s1=e1+2;
      }

      for(j=s1;j<=led;j++){
         d[j]=0;
      }

      e1=led;
      for(j=ked;j>=kst;j--){
         s1=e1-iy[i][j]+1;
         for(l=s1; l<=e1; l++){
            if(d[l] == j){
               mark(i,j,'y',1);
               map( i,l,'y',100);
               if(maperr==1) return;
            }
         }
         e1=s1-2;
      }
SSY1:i=i;
}


void lse(int i, char yt){

   int j,k,n,qsum,p,j1;

   if(yt == 't'){
      kmck(i,'t');
      k=it[i][KKK];

      qsum=0;
      for(n=1; n<kmin; n++){
         qsum=qsum+it[i][n];
      }
      p=0;
      for(j=1; (j<=yokomax && p<qsum); j++){
         if(data[i][j]==100) p++;
      }
      ls=j;
      while(ls<yokomax&&data[i][ls]==200) ls++;

      qsum=0;
      for(n=kmax+1; n<=k; n++){
         qsum=qsum+it[i][n];
      }
      p=0;
      for(j=yokomax; (j>=1 && p<qsum); j--){
         if(data[i][j]==100) p++;
      }
      le=j;
      while(le>1&&data[i][le]==200) le--;

   }

   if(yt == 'y'){
      kmck(i,'y');
      k=iy[i][KKK];

      qsum=0;
      for(n=1; n<kmin; n++){
         qsum=qsum+iy[i][n];
      }
      p=0;
      for(j=1; (j<=tatemax && p<qsum); j++){
         if(data[j][i]==100) p++;
      }
      ls=j;
      while(ls<tatemax&&data[ls][i]==200) ls++;

      qsum=0;
      for(n=kmax+1; n<=k; n++){
         qsum=qsum+iy[i][n];
      }
      p=0;
      for(j=tatemax; (j>=1 && p<qsum); j--){
         if(data[j][i]==100) p++;
      }
      le=j;
     while(le>1&&data[le][i]==200) le--;

   }
}

void kmck(int i,char yt){

      int j,k;

   if(yt == 't'){
      k=it[i][KKK];
      for(j=1;j<=k;j++){
         if(ht[i][j]==5 && j==it[i][KSTART]) it[i][KSTART]++;
      }
      for(j=k;j>=1;j--){
         if(ht[i][j]==5 && j==it[i][KEND])   it[i][KEND]--;
      }
      kmin=it[i][KSTART];
      kmax=it[i][KEND];
   }
   if(yt == 'y'){

      k=iy[i][KKK];
      for(j=1;j<=k;j++){
         if(hy[i][j]==5 && j==iy[i][KSTART]) iy[i][KSTART]++;
      }
      for(j=k;j>=1;j--){
         if(hy[i][j]==5 && j==iy[i][KEND])   iy[i][KEND]--;
      }
      kmin=iy[i][KSTART];
      kmax=iy[i][KEND];
   }
}

void batu1it(int i, int kst, int ked, int lst, int led)
{
   int min1,max1,pl,count,j,kc=0,l,k,m,p;

   min1=0;
   max1=0;
   pl=0;
   for(j=lst;j<=led;j++){
      if(d[j]==100){
         min1=j;
         goto BT1;
      }
   }
BT1:
   for(j=led;j>=lst;j--){
      if(d[j]==100){
         max1=j;
         goto BT2;
      }
   }
BT2:
   for(j=min1;j<=max1;j++){
      if(d[j]!=100){
         goto BT3;
      }
   }

   pl=max1-min1+1;
   if(min1==0 || max1==0) goto BT3;
   count=0;
   for(j=kst;j<=ked;j++){
      if(it[i][j]>=pl){
         kc=j;
         count++;
      }
   }
   if(count==1){

      if(  (max1-it[i][kc])+1 >lst && kc==kst){
         m=max1-it[i][kc];
         for(l=lst; l<=m; l++){
            map(i,l,'t',200);
               if(maperr==1) return;
         }
      }
      if(  (min1+it[i][kc])-1 <= led && kc==ked){
         m=min1+it[i][kc];
         for(l=m; l<=led; l++){
            map(i,l,'t',200);
               if(maperr==1) return;
         }
      }
   }
BT3:i=i;
}

void batu1iy(int i, int kst, int ked, int lst, int led)
{
   int min1,max1,pl=0,count=0,j,k,kc=0,l,m,p;

   min1=0;
   max1=0;
   pl  =0;
   for(j=lst;j<=led;j++){
      if(d[j]==100){
         min1=j;
         goto BY1;
      }
   }
BY1:
   for(j=led;j>=lst;j--){
      if(d[j]==100){
         max1=j;
         goto BY2;
      }
   }
BY2:
   for(j=min1;j<=max1;j++){
      if(d[j]!=100){
         goto BY3;
      }
   }

   pl=max1-min1+1;
   if(min1==0 || max1==0) goto BY3;
   count=0;
   for(j=kst;j<=ked;j++){
      if(iy[i][j]>=pl){
         kc=j;
         count++;
      }
   }
   if(count==1){


      if(  (max1-iy[i][kc]+1) >lst && kc==kst){
         m=max1-iy[i][kc];

         for(l=lst; l<=m; l++){
            map(i,l,'y',200);
               if(maperr==1) return;
         }
      }
      if(  (min1+iy[i][kc]-1) <= led && kc==ked){
         m=min1+iy[i][kc];
         for(l=m; l<=led; l++){
            map(i,l,'y',200);
               if(maperr==1) return;
         }
      }
   }
BY3:i=i;
}

void swe(int i,char yt){

   int m,l;

   if(yt == 't'){
      for(l=1; l<=yokomax; l++){
         if(data[i][l] == 0){   map(i,l,'t',200); if(maperr==1) return;}

      }
   }
   if(yt == 'y'){
      for(l=1; l<=tatemax; l++){
         if(data[l][i] == 0){   map(i,l,'y',200); if(maperr==1) return; }

      }
   }
}

void pcheckt2(int i){

   int j,k,l,km,m,p,ll[5],a,b,c,d,e;
   int n,aflag,lsum,lg,ax,bx;

      if(it[i][KFIN]==0){
         fax1it(i,1,yokomax);
         k=it[i][KKK];

         km=1;
         lg=0;
         ax=0;
         for(j=1;j<=mmax;j++){
            if(fup[j]== 0 ){
               bx=0;
               if(fup[j-1] == 1 && j-1>=1)    bx++;
               if(fup[j+1] == 1 && j+1<=mmax) bx++;
               if(lg==0)                ax=bx;
               if(lg-ax < fdw[j]-bx) ax=bx;
               lg=max11(lg,fdw[j]);
               
            }
            if(fup[j] == 1 && fdw[j] < it[i][km]){
               goto PCT1A;
            }
            if(fup[j] == 1 && fdw[j] > it[i][km]){
               goto PCT1A;
            }
            if(fup[j] == 1 && fdw[j] == it[i][km]){

               if(lg>=it[i][km]+ax){   goto PCT1A;   }
               mark(i,km,'t',5);
                sst[i][km]=max11(sst[i][km],f1[j]);
                eet[i][km]=min11(eet[i][km],f2[j]);
               lg=0;
               ax=0;
               km++;
            }
         }
PCT1A:
         km=k;
         lg=0;
         ax=0;
         for(j=mmax;j>=1;j--){

            if(fup[j] == 0 ){
               bx=0;
               if(fup[j-1] == 1 && j-1>=1)    bx++;
               if(fup[j+1] == 1 && j+1<=mmax) bx++;
               if(lg==0)                ax=bx;
               if(lg-ax < fdw[j]-bx) ax=bx;
               lg=max11(lg,fdw[j]);
            }
            if(fup[j] == 1 && fdw[j] < it[i][km]){
               goto PCT2A;
            }
            if(fup[j] == 1 && fdw[j] > it[i][km]){
               goto PCT2A;
            }
            if(fup[j] == 1 && fdw[j] == it[i][km]){
               if(lg>=it[i][km]+ax){   goto PCT2A;   }
               mark(i,km,'t',5);
                sst[i][km]=max11(sst[i][km],f1[j]);
                eet[i][km]=min11(eet[i][km],f2[j]);
               lg=0;
               ax=0;
               km--;
            }
         }
PCT2A:
         lsum=0;
         for(j=1;j<=k;j++){
            lsum=lsum+it[i][j];
         }
         aflag=0;
         for(j=1;j<=yokomax;j++){
            if(data[i][j] == 100) aflag++;
         }
         if(aflag == lsum){
            for(j=1;j<=k;j++){
               mark(i,j,'t',255);
            }
            swe( i,'t');
            ksef(i,'t');
         }
      }
}

void pchecky2(int i){

   int j,k,l,km,m,p,ll[5],a,b,c,d,e;
   int lflag,n,lsum,aflag,lg,ax,bx;

      if(iy[i][KFIN]==0){
         fax1iy(i,1,tatemax);
         k=iy[i][KKK];
         km=1;
         lg=0;
         ax=0;
         for(j=1;j<=mmax;j++){
            if(fup[j]== 0 ){
               bx=0;
               if(fup[j-1] == 1 && j-1>=1)    bx++;
               if(fup[j+1] == 1 && j+1<=mmax) bx++;
               if(lg==0)                ax=bx;
               if(lg-ax < fdw[j]-bx) ax=bx;
               lg=max11(lg,fdw[j]);
            }
            if(fup[j] == 1 && fdw[j] <  iy[i][km]){
               goto PCY1A;
            }
            if(fup[j] == 1 && fdw[j] >  iy[i][km]){
               goto PCY1A;
            }
            if(fup[j] == 1 && fdw[j] == iy[i][km]){
               if(lg>=iy[i][km]+ax){   goto PCY1A;   }

               mark(i,km,'y',5);

                ssy[i][km]=max11(ssy[i][km],f1[j]);
                eey[i][km]=min11(eey[i][km],f2[j]);
               lg=0;
               ax=0;
               km++;
            }
         }
PCY1A:
         km=k;
         lg=0;
         ax=0;
         for(j=mmax;j>=1;j--){
            if(fup[j] == 0 ){
               bx=0;
               if(fup[j-1] == 1 && j-1>=1)    bx++;
               if(fup[j+1] == 1 && j+1<=mmax) bx++;
               if(lg==0)                ax=bx;
               if(lg-ax < fdw[j]-bx) ax=bx;
               lg=max11(lg,fdw[j]);
            }
            if(fup[j] == 1 && fdw[j] <  iy[i][km]){
               goto PCY2A;
            }
            if(fup[j] == 1 && fdw[j] >  iy[i][km]){
               goto PCY2A;
            }
            if(fup[j] == 1 && fdw[j] == iy[i][km]){

               if(lg>=iy[i][km]+ax){   goto PCY2A;   }

               mark(i,km,'y',5);
                ssy[i][km]=max11(ssy[i][km],f1[j]);
                eey[i][km]=min11(eey[i][km],f2[j]);
               lg=0;
               ax=0;
               km--;
            }
         }
PCY2A:

         lsum=0;
         for(j=1;j<=k;j++){
            lsum=lsum+iy[i][j];
         }
         aflag=0;
         for(j=1;j<=tatemax;j++){
            if(data[j][i] == 100) aflag++;
         }
         if(aflag==lsum){
            for(j=1;j<=k;j++){
               mark(i,j,'y',255);
            }
            swe( i,'y');
            ksef(i,'y');
         }
      }
}

void qcheckt2(int i){

   int j,k,l,km,m,p,ll[5],a,b,c,d,e;
   int n,aflag,lsum,lg,ax,bx;

      if(it[i][KFIN]==0){
         k=it[i][KKK];
        for(j=1;j<=k;j++){
              for(m=1;m<=mmax;m++){
                     if(1<j&&j<k&&1<m&&m<mmax&&fup[m-1]==2&&fup[m]==1&&fup[m+1]==2&&it[i][j]==fdw[m]&&ut[i][j]==1){
                          ht[i][j]=5;
                          sst[i][j]=max11(sst[i][j],f1[m]);
                          eet[i][j]=min11(eet[i][j],f2[m]);
                     }
               }
        }

        lse(i,'t');
        fax1it(i,ls,le);
        for(j=kmin;j<=kmax;j++){
           for(m=1;m<=mmax;m++){
               if(kmin<j&&j<kmax&&1<m&&m<mmax&&fup[m-1]==2&&fup[m]==1&&fup[m+1]==2&&it[i][j]==fdw[m]&&ht[i][j]<5){
                   b=0;
                   for(a=kmin;a<=kmax;a++){
                      if(it[i][a]==fdw[m]&&sst[i][a]<=f1[m]&&f2[m]<=eet[i][a]){
                          if(b==0) c=a;
                          else if(b==1) goto PCHTT1;
                          b++;
                      }
                   }
                   if(b==1){
                          ht[i][c]=5;
                          sst[i][c]=f1[m];
                          eet[i][c]=f2[m];
                          
                   }
                }
PCHTT1:i=i;
            }
       }

 
         bx=1;
         while(bx<yokomax&&data[i][bx]==200) bx++;
         sst[i][1]=max11(bx,sst[i][1]);

         if(ht[i][1]==5){
            bx=1;
            while(bx<sst[i][1]){
               if(data[i][bx]==0) map(i,bx,'t',200);
               bx++;
            }
         }

         bx=yokomax;
         while(bx>1&&data[i][bx]==200) bx--;
         eet[i][k]=min11(bx,eet[i][k]);

         if(ht[i][k]==5){
            bx=yokomax;
            while(bx>eet[i][k]){
               if(data[i][bx]==0) map(i,bx,'t',200);
               bx--;
            }
         }


         for(j=1;j<k;j++){
	     if(ht[i][j]==5){
	        m=j;
		p=eet[i][m];
		while(m+1<=k&&ht[i][m+1]!=5){
                   bx=sst[i][m+1]=max11(sst[i][m+1],p+2);
		   while(data[i][bx]==200&&bx<yokomax) bx++;
                   sst[i][m+1]=max11(sst[i][m+1],bx);
		   p=sst[i][m+1]+it[i][m+1]-1;
		   m++;
		}
	     }
	     else{
	        m=j;
		p=sst[i][m]+it[i][m]-1;
		while(m+1<=k&&ht[i][m+1]!=5){
                   bx=sst[i][m+1]=max11(sst[i][m+1],p+2);
		   while(data[i][bx]==200&&bx<yokomax) bx++;
                   sst[i][m+1]=max11(sst[i][m+1],bx);
		   p=sst[i][m+1]+it[i][m+1]-1;
		   m++;
		}
	     }
  	 }
         for(j=k;j>1;j--){
	     if(ht[i][j]==5){
		m=j;
		p=sst[i][m];
		while(m-1>=1&&ht[i][m-1]!=5){
                   bx=eet[i][m-1]=min11(eet[i][m-1],p-2);
		   while(data[i][bx]==200&&bx>1) bx--;
                   eet[i][m-1]=min11(eet[i][m-1],bx);
		   p=eet[i][m-1]-it[i][m-1]+1;
		   m--;
		}
	     }
	     else{
		m=j;
		p=eet[i][m]-it[i][m]+1;
		while(m-1>=1&&ht[i][m-1]!=5){
                   bx=eet[i][m-1]=min11(eet[i][m-1],p-2);
		   while(data[i][bx]==200&&bx>1) bx--;
                   eet[i][m-1]=min11(eet[i][m-1],bx);
		   p=eet[i][m-1]-it[i][m-1]+1;
		   m--;
		}
	     }

         }
         for(j=kmin;j<=kmax;j++){
	        m=sst[i][j];
                while(data[i][m]!=200&&m<=eet[i][j]) m++;
                if(m==sst[i][j]) bx=0;
                else             bx=m-1;
	        if(bx&&((bx-sst[i][j]+1)<it[i][j])){
                    sst[i][j]=max11(sst[i][j],bx+2);
	        }
         }

         for(j=kmax;j>=kmin;j--){
	        m=eet[i][j];
		while(data[i][m]!=200&&m>=sst[i][j]) m--;
                if(m==eet[i][j]) bx=0;
                else             bx=m+1;
	        if(bx&&(eet[i][j]-bx+1)<it[i][j]){
                     eet[i][j]=min11(eet[i][j],bx-2);
 	        }
         }

      }

}

void qchecky2(int i){

   int j,k,l,km,m,p,ll[5],a,b,c,d,e;
   int lflag,n,lsum,aflag,lg,ax,bx;

      if(iy[i][KFIN]==0){
         k=iy[i][KKK];
 
        for(j=1;j<=k;j++){
              for(m=1;m<=mmax;m++){
                     if(1<j&&j<k&&1<m&&m<mmax&&fup[m-1]==2&&fup[m]==1&&fup[m+1]==2&&iy[i][j]==fdw[m]&&uy[i][j]==1){
                          hy[i][j]=5; 
                          ssy[i][j]=max11(ssy[i][j],f1[m]);
                          eey[i][j]=min11(eey[i][j],f2[m]);
                     }
               }
        }


        lse(i,'y');
        fax1iy(i,ls,le);
        for(j=kmin;j<=kmax;j++){
           for(m=1;m<=mmax;m++){
               if(kmin<j&&j<kmax&&1<m&&m<mmax&&fup[m-1]==2&&fup[m]==1&&fup[m+1]==2&&iy[i][j]==fdw[m]&&hy[i][j]<5){
                   b=0;
                   for(a=kmin;a<=kmax;a++){
                       if(iy[i][a]==fdw[m]&&ssy[i][a]<=f1[m]&&f2[m]<=eey[i][a]){
                            if(b==0) c=a;
                            else if(b==1) goto PCHYY1;
                            b++;
                       }
                   }
                   if(b==1){
                          hy[i][c]=5; 
                          ssy[i][c]=f1[m];
                          eey[i][c]=f2[m];
                   }
              }
PCHYY1:i=i;
           }
       }
 
         bx=1;
         while(bx<tatemax&&data[bx][i]==200) bx++;
         ssy[i][1]=max11(bx,ssy[i][1]);

         if(hy[i][1]==5){
            bx=1;
            while(bx<ssy[i][1]){
               if(data[bx][i]==0) map(i,bx,'y',200);
               bx++;
            }
         }

         bx=tatemax;
         while(bx>1&&data[bx][i]==200) bx--;
         eey[i][k]=min11(bx,eey[i][k]);

         if(hy[i][k]==5){
            bx=tatemax;
            while(bx>eey[i][k]){
               if(data[bx][i]==0) map(i,bx,'y',200);
               bx--;
            }
         }

           for(j=1;j<k;j++){
	     if(hy[i][j]==5){
	        m=j;
		p=eey[i][m];
		while(m+1<=k&&hy[i][m+1]!=5){
                   bx=ssy[i][m+1]=max11(ssy[i][m+1],p+2);
		   while(data[bx][i]==200&&bx<tatemax) bx++;
                   ssy[i][m+1]=max11(ssy[i][m+1],bx);
		   p=ssy[i][m+1]+iy[i][m+1]-1;
		   m++;
		}
	     }
	     else{
	        m=j;
		p=ssy[i][m]+iy[i][m]-1;
		while(m+1<=k&&hy[i][m+1]!=5){
                   bx=ssy[i][m+1]=max11(ssy[i][m+1],p+2);
		   while(data[bx][i]==200&&bx<tatemax) bx++;
                   ssy[i][m+1]=max11(ssy[i][m+1],bx);
		   p=ssy[i][m+1]+iy[i][m+1]-1;
		   m++;
		}
	     }
  	 }

         for(j=k;j>1;j--){
	     if(hy[i][j]==5){
		m=j;
		p=ssy[i][m];
		while(m-1>=1&&hy[i][m-1]!=5){
                   bx=eey[i][m-1]=min11(eey[i][m-1],p-2);
		   while(data[bx][i]==200&&bx>1) bx--;
                   eey[i][m-1]=min11(eey[i][m-1],bx);
		   p=eey[i][m-1]-iy[i][m-1]+1;
		   m--;
		}
	     }
	     else{
		m=j;
		p=eey[i][m]-iy[i][m]+1;
		while(m-1>=1&&hy[i][m-1]!=5){
                   bx=eey[i][m-1]=min11(eey[i][m-1],p-2);
		   while(data[bx][i]==200&&bx>1) bx--;
                   eey[i][m-1]=min11(eey[i][m-1],bx);
		   p=eey[i][m-1]-iy[i][m-1]+1;
		   m--;
		}
	     }

         }

         for(j=kmin;j<=kmax;j++){
	        m=ssy[i][j];
                while(data[m][i]!=200&&m<=eey[i][j]) m++;
                if(m==ssy[i][j]) bx=0;
                else             bx=m-1;
	        if(bx&&((bx-ssy[i][j]+1)<iy[i][j])){
                    ssy[i][j]=max11(ssy[i][j],bx+2);
	        }
         }

         for(j=kmax;j>=kmin;j--){
	        m=eey[i][j];
		while(data[m][i]!=200&&m>=ssy[i][j]) m--;
                if(m==eey[i][j]) bx=0;
                else             bx=m+1;
	        if(bx&&(eey[i][j]-bx+1)<iy[i][j]){
                     eey[i][j]=min11(eey[i][j],bx-2);
 	        }
         }

      }
}


void fax1it(int i,int lst,int led){

   int j,k,m;
   int d0,d100,d200,flag,f3;

      m=1;
      d0 = d100 = d200 = 0;
      j=lst;
      while(j<= led){
         flag=0;
         if(data[i][j]==0 && flag==0){
            flag=1;
            f1[m]=f3=j;
            while(data[i][j]==0 && j<=led){
               d0++;
               j++;
            }
         }
         if(data[i][j]==100 && flag==0){
            flag=1;
            f1[m]=f3=j;
            while(data[i][j]==100 && j<=led){
               d100++;
               j++;
            }
         }
         if(data[i][j]==200 && flag==0){
            flag=1;
            f1[m]=f3=j;
            while(data[i][j]==200 && j<=led){
               d200++;
               j++;
            }
         }
         if(data[i][f3]==0){
           fup[m]=0;
             fdw[ m]=d0;
            f2[m]=f3+d0-1;
         }
         if(data[i][f3]==100){
            fup[m]=1;
            fdw[m]=d100;
            f2[m]=f3+d100-1;
         }
     
        if(data[i][f3]==200){
           fup[m]=2;
           fdw[m]=d200;
            f2[m]=f3+d200-1;
         }
         d0 = d100 = d200 = 0;
         m++;
      }
      mmax=m-1;
}

void fax1iy(int i,int lst,int led){

   int j,k,m;
   int d0,d100,d200,flag,f3;

      m=1;
      d0 = d100 = d200 = 0;
      j=lst;
      while(j<= led){
         flag=0;
         if(data[j][i]==0 && flag==0){
            flag=1;
            f1[m]=f3=j;
            while(data[j][i]==0 && j<=led){
               d0++;
               j++;
            }
         }
         if(data[j][i]==100 && flag==0){
            flag=1;
            f1[m]=f3=j;
            while(data[j][i]==100 && j<=led){
               d100++;
               j++;
            }
         }
         if(data[j][i]==200 && flag==0){
            flag=1;
            f1[m]=f3=j;
            while(data[j][i]==200 && j<=led){
               d200++;
               j++;
            }
         }
         if(data[f3][i]==0){
             fup[m]=0;
             fdw[ m]=d0;
             f2[m]=f3+d0-1;
         }
         if(data[f3][i]==100){
            fup[m]=1;
            fdw[m]=d100; 
            f2[m]=f3+d100-1;
         }
         if(data[f3][i]==200){
            fup[m]=2;
            fdw[m]=d200;
            f2[m]=f3+d200-1;
         }
         d0 = d100 = d200 = 0;
         m++;
      }
      mmax=m-1;

}

void intro(){

   int i,j,k;

   for(i=1;i<=tatemax;i++){
      for(j=1;j<=yokomax;j++){
         data[i][j]=0;
      }
   }

   for(i=1;i<=tatemax;i++){
      for(j=1;j<=it[i][KKK];j++){
          ut[i][j]=0;
          ht[i][j]=0;
      }
   }
   for(i=1;i<=yokomax;i++){
      for(j=1;j<=iy[i][KKK];j++){
          uy[i][j]=0;
          hy[i][j]=0;
      }
   }
   uniqt();
   uniqy();


   for(i=1;i<=tatemax;i++){
      it[i][KSTART]=1;
      it[i][KEND]=it[i][KKK];
      it[i][KFIN]=0;
   }
   for(i=1;i<=yokomax;i++){
      iy[i][KSTART]=1;
      iy[i][KEND]=iy[i][KKK];
      iy[i][KFIN]=0;
   }

   for(i=1;i<=yokomax;i++){
      for(j=1;j<=iy[i][KKK];j++){
         vmark(i,j,'y',iy[i][j]);
      }
   }

   for(i=1;i<=tatemax;i++){
      for(j=1;j<=it[i][KKK];j++){
         vmark(i,j,'t',it[i][j]);
      }
   }


   for(i=1;i<=ex1;i++){
      if(exz[i]==100) map(exx[i],exy[i],'y',100);
      else            map(exx[i],exy[i],'y',200);
      if(maperr==1) return;
      /*printf("3000 i=%d x=%d y=%d z=%d  \n",i,exx[i],exy[i],exz[i]);*/
   }
   for(i=1;i<=yokomax;i++){
      if(i%5==0){
         box((kymax)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,6);
         box((kymax+tatemax+1)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,6);
      }
      if(i%10==0){
         box((kymax)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,5);
         box((kymax+tatemax+1)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,5);
      }
   }
   for(i=1;i<=tatemax;i++){
      if(i%5==0){
         box((kymax+i)*dot1+dot1/2+17,(ktmax)*dot1+dot1/2+27,5,6);
         box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+1)*dot1+dot1/2+27,5,6);
      }
      if(i%10==0){
         box((kymax+i)*dot1+dot1/2+17,(ktmax)*dot1+dot1/2+27,5,5);
         box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+1)*dot1+dot1/2+27,5,5);
      }
   }

   for(i=1;i<=yokomax;i++){
      k=iy[i][KKK];
      ssy[i][1]=1;
      for(j=2;j<=k;j++){
          ssy[i][j]=ssy[i][j-1]+iy[i][j-1]+1;
      }
      eey[i][k]=tatemax;
      for(j=k-1;j>=1;j--){
          eey[i][j]=eey[i][j+1]-iy[i][j+1]-1;
      }
   }
   for(i=1;i<=tatemax;i++){
      k=it[i][KKK];
      sst[i][1]=1;
      for(j=2;j<=k;j++){
          sst[i][j]=sst[i][j-1]+it[i][j-1]+1;
      }
      eet[i][k]=yokomax;
      for(j=k-1;j>=1;j--){
          eet[i][j]=eet[i][j+1]-it[i][j+1]-1;
      }
   }

//   for(i=0;i<NISEN;i++) asx[i]=asy[i]=asj[i]=ask[i]=asl[i]=0;

}

void intro2(){

   int i,j,k;

   nuri=0;
   for(i=1;i<=tatemax;i++){
      for(j=1;j<=yokomax;j++){
         data[i][j]=0;
      }
   }

   for(i=1;i<=tatemax;i++){
      for(j=1;j<=it[i][KKK];j++){
          ut[i][j]=0;
          ht[i][j]=0;
      }
   }
   for(i=1;i<=yokomax;i++){
      for(j=1;j<=iy[i][KKK];j++){
          uy[i][j]=0;
          hy[i][j]=0;
      }
   }
 
   for(i=1;i<=tatemax;i++){
      it[i][KSTART]=1;
      it[i][KEND]=it[i][KKK];
      it[i][KFIN]=0;
   }
   for(i=1;i<=yokomax;i++){
      iy[i][KSTART]=1;
      iy[i][KEND]=iy[i][KKK];
      iy[i][KFIN]=0;
   }

/*
            for(i=1;i<=yokomax;i++){
                for(j=1;j<=tatemax;j++){
                   if(data[j][i] == 0) box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,18);
                   //if(d1[j][i] == 100){ box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,5);nuri++;}
                   //if(d1[j][i] == 200){ box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,6);nuri++;}
                }
             }
*/

   for(i=1;i<=yokomax;i++){
      k=iy[i][KKK];
      ssy[i][1]=1;
      for(j=2;j<=k;j++){
          ssy[i][j]=ssy[i][j-1]+iy[i][j-1]+1;
      }
      eey[i][k]=tatemax;
      for(j=k-1;j>=1;j--){
          eey[i][j]=eey[i][j+1]-iy[i][j+1]-1;
      }
   }
   for(i=1;i<=tatemax;i++){
      k=it[i][KKK];
      sst[i][1]=1;
      for(j=2;j<=k;j++){
          sst[i][j]=sst[i][j-1]+it[i][j-1]+1;
      }
      eet[i][k]=yokomax;
      for(j=k-1;j>=1;j--){
          eet[i][j]=eet[i][j+1]-it[i][j+1]-1;
      }
   }

   for(i=1;i<=yokomax;i++){
      if(i%5==0){
         box((kymax)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,6);
         box((kymax+tatemax+1)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,6);
      }
      if(i%10==0){
         box((kymax)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,5);
         box((kymax+tatemax+1)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,5);
      }
      box((kymax+tatemax+2)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,18);
   }
   for(i=1;i<=tatemax;i++){
      if(i%5==0){
         box((kymax+i)*dot1+dot1/2+17,(ktmax)*dot1+dot1/2+27,5,6);
         box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+1)*dot1+dot1/2+27,5,6);
      }
      if(i%10==0){
         box((kymax+i)*dot1+dot1/2+17,(ktmax)*dot1+dot1/2+27,5,5);
         box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+1)*dot1+dot1/2+27,5,5);
      }
      box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+2)*dot1+dot1/2+27,5,18);
   }
 
}


void mno_open1(char *file){

   int i=0,j=0,k=0;
   int xx=0,y=0,mtype=0,uti=0,fhajime=0;
   int tt=0,yy=0,m=0,a,b;
   char aam[50],bbm[50];

   FILE *fpin;
   int c;

   strcpy(aam,"");
   strcpy(bbm,"");
   fpin = fopen(file,"r");
   if(fpin==0){
      printf("ファイル名が %s やて？　そんなのあらへんで\n\n",file);
      exit(0);
   }
   c=fgetc(fpin);

   j=1;
   ex1=0;
   while(c != EOF){
      mtype=0;
      fhajime=0;
      y=0;
      m=0;
      k=1;
      i=0;
      while(c != '\n'){
         if(i==0){
            if(c == '*' ){
               c=fgetc(fpin);
               if(     c == 'T'){   mtype=1; uti=1;  i++;  }
               else if(c == 'Y'){   mtype=1; uti=2;  i++;  }
               else if(c == 't'){   mtype=1; uti=3;  i++;  }
               else if(c == 'y'){   mtype=1; uti=4;  i++;  }
               else if(c == 'S'){   mtype=1; uti=10; i++;  }
               else if(c == 's'){   mtype=1; uti=10; i++;  }
               else if(c == 'R'){   mtype=1; uti=15; i++;  }
               else if(c == 'r'){   mtype=1; uti=15; i++;  }
               else if(c == 'K'){   mtype=1; uti=20; i++;  }
               else if(c == 'k'){   mtype=1; uti=20; i++;  }
               else if(c == 'D'){   mtype=1; uti=25; i++;  }
               else if(c == 'd'){   mtype=1; uti=25; i++;  }
               else if(c == 'L'){   mtype=1; uti=30; i++;  }
               else if(c == 'l'){   mtype=1; uti=30; i++;  }
               else if(c == 'Z'){   mtype=1; uti=35; i++; ex1++; }
               else if(c == 'z'){   mtype=1; uti=35; i++; ex1++; }
               else if(c == 'X'){   mtype=40;        i++;  }
               else if(c == 'x'){   mtype=40;        i++;  }
               else if(c == 'M'){   mtype=45;        i++;  }
               else if(c == 'm'){   mtype=45;        i++;  }
               else if(c == 'A'){   mtype=50;        i++;  }
               else if(c == 'a'){   mtype=50;        i++;  }
               else if(c == 'B'){   mtype=51;        i++;  }
               else if(c == 'b'){   mtype=51;        i++;  }
               else{
                  printf("何かおかしいんと、ちゃいまっか");
                  printf(" %d 行の２文字目が %c \n",j,c);
                  exit(0);
               }
            }
            else if(c == ';'){  mtype=99; i++;   }
            else if(c == ' '){  mtype=99; i++;   }
            else{
               printf("何かおかしいんと、ちゃいまっか");
               printf(" %d 行の１文字目が %c \n",j,c);
               exit(0);
            }
         }
         else{
            if(mtype==45){
               msg[m]=c;
               m++;
            }
            if(mtype==50){
               aam[m]=c;
               aam[m+1]='\0';
               m++;
            }
            if(mtype==51){
               bbm[m]=c;
               bbm[m+1]='\0';
               m++;
            }
            if(c == ' ' && mtype==1 && fhajime==0){
               if(uti==1){ tatemax=xx; }
               if(uti==2){ yokomax=xx; }
               if(uti==10){
                  if(0<= xx && xx <=9) sl=xx;
                  else                 sl=6;
               }
               if(uti==15){
                  if(xx == 1) trace=1;
                  else        trace=0;
               }
               if(uti==20){
                  if(0<= xx && xx < 50) kdata=xx;
                  else                  kdata=50;
               }
               if(uti==25){
                  if(0<= xx && xx < 500) speed=xx;
                  else                  speed=5;
               }
               if(uti==30){
                  if(0<= xx && xx < 220) length=xx;
                  else                   length=220;
               }
               if(uti==3){
                  if(xx==1){ tt=1; }
                  else{
                     tt++;
                     if(tt != xx){
                        printf("順序がちゃう縦 %d 行\n",tt);
                        exit(0);
                     }
                  }
                  y=0;
               }
               if(uti==4){
                  if(xx==1){ yy=1; }
                  else{
                     yy++;
                     if(yy != xx){
                        printf("順序がちゃう横 %d 行\n",yy);
                        exit(0);
                     }
                  }
                  y=0;
               }
               if(uti==35){
                  exx[ex1]=xx;
                  xx=0;y=0;
               }
               fhajime=1;
            }
            if((c == ','|| c == '.') && mtype==1 && fhajime==0){
               if(uti==35){ exx[ex1]=xx; xx=0; y=0; fhajime=1; }
            }
            if((c == ','|| c == '.') && mtype==1 && fhajime==1){
               if(uti==3){      it[tt][k]=xx; y=0; }
               else if(uti==4){ iy[yy][k]=xx; y=0; }
               else if(uti==35){ exy[ex1]=xx; xx=0; y=0; }
               k++;
            }
            if('0' <= c && c <= '9' && mtype==1){ 
               xx=c-'0'+y*10;
               y=xx;
            }
         }
         c=fgetc(fpin);
      }
      if(mtype==1 ){
         if(fhajime==0 ){
            if(uti==1){  tatemax=xx; }
            if(uti==2){  yokomax=xx; }
            if(uti==10){ 
               if(0<= xx && xx <=9) sl=xx;
               else                 sl=6;
            }
            if(uti==15){
               if(xx == 1) trace=1;
               else        trace=0;
            }
            if(uti==20){
               if(0<= xx && xx < 50) kdata=xx;
               else                  kdata=50;
            }
            if(uti==25){
               if(0<= xx && xx < 500) speed=xx;
               else                  speed=5;
            }
            if(uti==30){
               if(0<= xx && xx < 220) length=xx;
               else                   length=220;
            }
            if(uti==35){
               exz[ex1]=xx;xx=0;y=0;
            }
         }
         if(fhajime==1){
            if(uti==3){
               it[tt][k]=xx;
               it[tt][KKK]=k;
            }
            else if(uti==4){ 
               iy[yy][k]=xx;
               iy[yy][KKK]=k;
            }
            else if(uti==35){ 
               exz[ex1]=xx;
            }
            else{
               printf("DATAが入ってないで：ファイル %s の %d 行\n",file,j);
               exit(0);
            }
         }
      }
      c=fgetc(fpin);
      j++;
   }
   fclose(fpin);

   if(strcmp(aam,"")!=0){
       aac=asc11(aam[0])*0x100000+asc11(aam[1])*0x010000+asc11(aam[2])*0x001000+asc11(aam[3])*0x000100+asc11(aam[4])*0x000010+asc11(aam[5])*0x000001;
   }
   if(strcmp(bbm,"")!=0){
       bbc=asc11(bbm[0])*0x100000+asc11(bbm[1])*0x010000+asc11(bbm[2])*0x001000+asc11(bbm[3])*0x000100+asc11(bbm[4])*0x000010+asc11(bbm[5])*0x000001;
   }

}


void point1x(void){

   int i,k;

   for(i=1;i<=tatemax;i++){
      k=it[i][KKK];
      sum1it( i, 1,k, 1,yokomax);
   }

   for(i=1;i<=yokomax;i++){
      k=iy[i][KKK];
      sum1iy( i, 1,k, 1,tatemax);
   }
}


void point2x(){

   int i,j,k;

   for(i=1;i<=tatemax;i++){
      if(data[i][1]==100){
         for(j=1;j<=it[i][1];j++){
            map(i,j,'t',100);
               if(maperr==1) return;
         }
         if(it[i][KFIN]==0){
            mark(i,1,'t',5);
         }
         if(it[i][1] !=  yokomax){
            map(i,j,'t',200);
               if(maperr==1) return;
         }
         if(it[i][KKK]==1){
            for(j=it[i][1]+1;j<=yokomax;j++){
               map(i,j,'t',200);
                if(maperr==1) return;
           }
            ksef(i,'t');
            mark(i,1,'t',255);
         }
      }
   }
   for(i=1;i<=yokomax;i++){
       if(data[1][i]==100){
         for(j=1;j<=iy[i][1];j++){
            map(i,j,'y',100);
               if(maperr==1) return;
         }
         if(iy[i][KFIN]==0){
            mark(i,1,'y',5);
         }
         if(iy[i][1] !=  tatemax){
            map(i,j,'y',200);
               if(maperr==1) return;
         }
         if(iy[i][KKK] == 1){
            for(j=iy[i][1]+1;j<=tatemax;j++){
               map(i,j,'y',200);
               if(maperr==1) return;
            }
            ksef(i,'y');
            mark(i,1,'y',255);
         }
      }
   }
   for(i=1;i<=tatemax;i++){
      k=it[i][KKK];
      if(data[i][yokomax]==100){
         for(j=yokomax;j>=yokomax-it[i][k]+1;j--){
            map(i,j,'t',100);
               if(maperr==1) return;
         }
         if(it[i][KFIN]==0){
            mark(i,k,'t',5);
         }
         if(it[i][k] !=  yokomax){
            map(i,j,'t',200);
               if(maperr==1) return;
         }
         if(k == 1){
            for(j=yokomax-it[i][k];j>=1;j--){
               map(i,j,'t',200);
               if(maperr==1) return;
            }
            ksef(i,'t');
            mark(i,k,'t',255);
         }
      }
   }
   for(i=1;i<=yokomax;i++){
      k=iy[i][KKK];
      if(data[tatemax][i]==100){
         for(j=tatemax;j>=tatemax-iy[i][k]+1;j--){
            map(i,j,'y',100);
               if(maperr==1) return;
         }
         if(iy[i][KFIN]==0){
            mark(i,k,'y',5);
         }
         if(iy[i][k] !=  tatemax){
            map(i,j,'y',200);
               if(maperr==1) return;
         }
         if(k == 1){
            for(j=tatemax-iy[i][k];j>=1;j--){
               map(i,j,'y',200);
               if(maperr==1) return;
            }
            ksef(i,'y');
            mark(i,k,'y',255);
         }
      }
   }
}

void point3(){

   int i,j,k;

   for(i=1;i<=tatemax;i++){
      if(it[i][KFIN]==0){
         k=it[i][KKK];
         for(j=1; j<=yokomax; j++){
             d[j]=data[i][j];
         }
         batu1it(i, 1,k, 1,yokomax);
      }
   }

   for(i=1;i<=yokomax;i++){
      if(iy[i][KFIN]==0){
         k=iy[i][KKK];
         for(j=1; j<=tatemax; j++){
             d[j]=data[j][i];
         }
         batu1iy(i, 1,k, 1,tatemax);
      }
   }
}



void point4a(){

   int i,j,k;

   for(i=1;i<=tatemax;i++){
      lse( i,'t');
      for(j=ls; j<=le; j++){
         d[j]=data[i][j];
      }
      batu1it(i, kmin,kmax, ls,le);
   }

   for(i=1;i<=yokomax;i++){
      lse( i,'y');
      for(j=ls; j<=le; j++){
         d[j]=data[j][i];
      }
      batu1iy(i, kmin,kmax, ls,le);
   }
}

void point5a(){

   int i,j,k,q;

  for(i=1;i<=tatemax;i++){
    if(it[i][KFIN]==0 && ht[i][1]<=5){
      q=1;
      if(data[i][q]==200){
         while(q<=yokomax && data[i][q]==200){
            q++;
         }
      }
      if(data[i][q]==100){
         for(j=q;j<=q-1+it[i][1];j++){
            map(i,j,'t',100);
               if(maperr==1) return;
         }
         if(q-1+it[i][1] !=  yokomax){
            map(i,j,'t',200);
               if(maperr==1) return;
         }
         mark(i,1,'t',5);
         if(it[i][KKK]==1){
            for(j=q+it[i][1];j<=yokomax;j++){
               map(i,j,'t',200);
               if(maperr==1) return;
            }
            ksef(i,'t');
            mark(i,1,'t',255);
         }
      }
    }
  }
  for(i=1;i<=yokomax;i++){
    if(iy[i][KFIN]==0 && hy[i][1]<=5){
      q=1;
      if(data[q][i]==200){
         while(q<=tatemax && data[q][i]==200){
            q++;
         }
      }
      if(data[q][i]==100){
         for(j=q;j<=q-1+iy[i][1];j++){
            map(i,j,'y',100);
                if(maperr==1) return;
        }
         if(q-1+iy[i][1] !=  tatemax){
            map(i,j,'y',200);
                if(maperr==1) return;
        }
         mark(i,1,'y',5);
         if(iy[i][KKK] == 1){
            for(j=q+iy[i][1];j<=tatemax;j++){
               map(i,j,'y',200);
               if(maperr==1) return;
            }
            ksef(i,'y');
            mark(i,1,'y',255);
         }
      }
    }
  }
  for(i=1;i<=tatemax;i++){
    k=it[i][KKK];
    if(it[i][KFIN]==0 && ht[i][k]<=5){
      q=yokomax;
      if(data[i][q]==200){
         while(q>=1 && data[i][q]==200){
            q--;
         }
      }
      if(data[i][q]==100){
         for(j=q;j>=q-it[i][k]+1;j--){
            map(i,j,'t',100);
               if(maperr==1) return;
         }
         if(q-it[i][k]+1 !=  1){
            map(i,j,'t',200);
               if(maperr==1) return;
         }
         mark(i,k,'t',5);
         if(k == 1){
            for(j=q-it[i][k];j>=1;j--){
               map(i,j,'t',200);
               if(maperr==1) return;
            }
            ksef(i,'t');
            mark(i,k,'t',255);
         }
      }
    }
  }
  for(i=1;i<=yokomax;i++){
    k=iy[i][KKK];
    if(iy[i][KFIN]==0 && hy[i][k]<=5){
      q=tatemax;
      if(data[q][i]==200){
         while(q>=1 && data[q][i]==200){
            q--;
         }
      }
      if(data[q][i]==100){
         for(j=q;j>=q-iy[i][k]+1;j--){
            map(i,j,'y',100);
               if(maperr==1) return;
         }
         if(q-iy[i][k]+1 !=  1){
            map(i,j,'y',200);
               if(maperr==1) return;
         }
         mark(i,k,'y',5);
         if(k == 1){
            for(j=q-iy[i][k];j>=1;j--){
               map(i,j,'y',200);
                if(maperr==1) return;
           }
            ksef(i,'y');
            mark(i,k,'y',255);
         }
      }
    }
  }
}

int max11(int a,int b){

   if(a<=b) return b;
   else     return a;
}

int min11(int a,int b){

   if(a<=b) return a;
   else     return b;

}


double max22(double a,double b){

   if(a<=b) return b;
   else     return a;
}

double min22(double a,double b){

   if(a<=b) return a;
   else     return b;

}

 
void v2it(){

   int i,k,qs,n,p,j,j2,pp;

   for(i=1;i<=tatemax;i++){
      pcheckt2(i);
      if(it[i][KFIN]==0){
         k=it[i][KKK];

         j2=1;
         pp=0;
         qs=0;
         for(n=1; n<=k; n++){
            if(ht[i][n] == 5){
               qs=it[i][n];
               p=0;
               for(j=j2; (j<=yokomax && p<qs); j++){
                  if(data[i][j] == 100) p++;
                  if(data[i][j] ==   0){ map(i,j,'t',200); if(maperr==1) return;}

               }
               j2=j;
               pp=p;
            }
            else{  goto V2T1; }
         }
V2T1:
         if(1<=j && j<=yokomax){
            if(data[i][j] ==   0 && pp==qs && qs!=0 ){ map(i,j,'t',200); if(maperr==1) return; }

         }

         j2=yokomax;
         pp=0;
         qs=0;
         for(n=k; n>=1; n--){
            if(ht[i][n] == 5){
               qs=it[i][n];
               p=0;
               for(j=j2; (j>=1 && p<qs); j--){
                  if(data[i][j] == 100) p++;
                  if(data[i][j] ==   0){ map(i,j,'t',200); if(maperr==1) return;}

               }
               j2=j;
               pp=p;
            }
            else{  goto V2T2; }
         }
V2T2:
         if(1<=j && j<=yokomax){
            if(data[i][j] ==   0 && pp==qs && qs!=0 ){ map(i,j,'t',200); if(maperr==1) return;}

         }
      }
   }
}

void v2iy(){

   int i,k,qs,n,p,j,j2,pp;

   for(i=1;i<=yokomax;i++){
      pchecky2(i);
      if(iy[i][KFIN]==0){
         k=iy[i][KKK];

         j2=1;
         pp=0;
         qs=0;
         for(n=1; n<=k; n++){
            if(hy[i][n] == 5){
               qs=iy[i][n];
               p=0;
               for(j=j2; (j<=tatemax && p<qs); j++){
                  if(data[j][i] == 100) p++;
                  if(data[j][i] ==   0){ map(i,j,'y',200); if(maperr==1) return;}

               }
               j2=j;
               pp=p;
            }
            else{  goto V2Y1; }
         }
V2Y1:
         if(1<=j && j<=tatemax){
            if(data[j][i] ==   0 && pp==qs && qs!=0 ){ map(i,j,'y',200); if(maperr==1) return;}

         }

         j2=tatemax;
         pp=0;
         qs=0;
         for(n=k; n>=1; n--){
            if(hy[i][n] == 5){
               qs=iy[i][n];
               p=0;
               for(j=j2; (j>=1 && p<qs); j--){
                  if(data[j][i] == 100) p++;
                  if(data[j][i] ==   0){ map(i,j,'y',200); if(maperr==1) return;}

               }
               j2=j;
               pp=p;
            }
            else{  goto V2Y2; }
         }
V2Y2:

         if(1<=j && j<=tatemax){
            if(data[j][i] ==   0 && pp==qs && qs!=0 ){ map(i,j,'y',200); if(maperr==1) return;}

         }
      }
   }
}


void a_write1(int a,int b,unsigned char *c,int ss)
{
   int s,t,u=0;

   for(s=0;s<5;s++){
       for(t=0;t<3;t++){
           if(*(c+u) != 0)  box(a+t*2,b+s*2,2,ss); 
           u++;
       }
   }

}

void chset1(int a, int b,int c,int ss)
{
   if(c==1) a_write1(a,b,chr_1, ss);
   if(c==2) a_write1(a,b,chr_2, ss);
   if(c==3) a_write1(a,b,chr_3, ss);
   if(c==4) a_write1(a,b,chr_4, ss);
   if(c==5) a_write1(a,b,chr_5, ss);
   if(c==6) a_write1(a,b,chr_6, ss);
   if(c==7) a_write1(a,b,chr_7, ss);
   if(c==8) a_write1(a,b,chr_8, ss);
   if(c==9) a_write1(a,b,chr_9, ss);
   if(c==0) a_write1(a,b,chr_0, ss);

}

void pr_10x(int suu,int x,int y,int col)
{
   int l=0;
   int su2;

   if(suu==0)   chset1( x-l*6,y,0,col);
   
   while(suu != 0){
      su2=suu%10;
      chset1(x-l*6,y,su2,col);
      suu=suu/10;
      l++;
   }

}

void box(x1,y1,fu,iro)
int x1,y1,fu,iro;
{
    if(iro==0){g_rgb(0x000000);}
    else if(iro==1){g_rgb(0xc00000);}
    else if(iro==2){g_rgb(0x00c000);}
    else if(iro==3){g_rgb(0x0000c0);}
    else if(iro==4){g_rgb(0xc0c000);}
    else if(iro==5){g_rgb(aac);}
    else if(iro==6){g_rgb(bbc);}
    else if(iro==7){g_rgb(0xc0c0c0);}
    else if(iro==8){g_rgb(0xc06000);}
    else if(iro==9){g_rgb(0xff0000);}
    else if(iro==10){g_rgb(0x0000ff);}
    else if(iro==11){g_rgb(0xc07050);}
    else if(iro==12){g_rgb(0x60c000);}
    else if(iro==13){g_rgb(0x704000);}
    else if(iro==14){g_rgb(0x000050);}
    else if(iro==15){g_rgb(0x505050);}
    else{g_rgb(0xf8f8f8);}

    g_fill(x1,y1,fu,fu);
}

void errorbox(x1,y1,fu)
int x1,y1,fu;
{
   int ff;

   ff=fu/2;
   box(x1   ,y1   ,ff, 9);
   box(x1+ff,y1   ,ff, 9);
   box(x1   ,y1+ff,ff, 9);
   box(x1+ff,y1+ff,ff, 9);

}


void bcheckt(){
   int i;

   for(i=1;i<=tatemax;i++){
      if(newt[i]==100||newt[i]==50){
          bcheck2t(i);
          if(maperr==1) return;
      }
   }
}


void bchecky(){
   int i;

   for(i=1;i<=yokomax;i++){
      if(newy[i]==100||newy[i]==50){
         bcheck2y(i);
         if(maperr==1) return;
      }
   }
}


void bcheck2t(int i){
   int j,k,l,m,p,r,n,aflag;

      pcheckt2(i);
      qcheckt2(i);
      if(it[i][KFIN]==0&&newt[i]==100){

         k=it[i][KKK];
 	 lse(i,'t');
         fax1it(i,ls,le);
/* 1 Q */

         if(fup[1]==1){ for(j=f1[1];j<=f1[1]+it[i][kmin]-1;j++){ map(i,j,'t',100); if(maperr==1) return;}

         }
         if(fup[mmax]==1){ for(j=f2[mmax];j>=f2[mmax]-it[i][kmax]+1;j--){ map(i,j,'t',100); if(maperr==1) return;}

         }
/* 21 xQ */

         if(fup[1]==2&&fup[2]==1&&mmax>=2){ for(j=f1[2];j<=f1[2]+it[i][kmin]-1;j++){ map(i,j,'t',100); if(maperr==1) return;}
         }
         if(fup[mmax]==2&&fup[mmax-1]==1&&mmax>=2){ for(j=f2[mmax-1];j>=f2[mmax-1]-it[i][kmax]+1;j--){ map(i,j,'t',100); if(maperr==1) return;}
         }

/* 02 _x */

	 if(fup[1]==0&&fup[2]==2&&fdw[1]<it[i][kmin]){
	     for(j=f1[1];j<=f2[1];j++){ map(i,j,'t',200); if(maperr==1) return;}
         }
	 if(fup[mmax]==0&&fup[mmax-1]==2&&fdw[mmax]<it[i][kmax]){
	     for(j=f1[mmax];j<=f2[mmax];j++){ map(i,j,'t',200); if(maperr==1) return;}
         }

/* 202 x_x */

	 if(fup[1]==2&&fup[2]==0&&fup[3]==2&&fdw[2]<it[i][kmin]){
	     for(j=f1[2];j<=f2[2];j++){ map(i,j,'t',200); if(maperr==1) return;}
         }
	 if(fup[mmax]==2&&fup[mmax-1]==0&&fup[mmax-2]==2&&fdw[mmax-1]<it[i][kmax]){
	     for(j=f1[mmax-1];j<=f2[mmax-1];j++){ map(i,j,'t',200); if(maperr==1) return;}
         }

  /* 012 _Qx */

	 if(fup[1]==0&&fup[2]==1&&fup[3]==2&&f2[2]-f1[1]<it[i][kmin]+it[i][kmin+1]&&f2[2]-f1[1]<=it[i][kmin]&&kmin+1<=kmax&&mmax>=3){
	     for(j=f2[2];j>=f2[2]-it[i][kmin]+1;j--){ map(i,j,'t',100); if(maperr==1) return;}
         }

	 if(fup[mmax]==0&&fup[mmax-1]==1&&fup[mmax-2]==2&&f2[mmax]-f1[mmax-1]<it[i][kmax]+it[i][kmax-1]&&f2[mmax]-f1[mmax-1]<=it[i][kmax]&&1<=kmax-1&&mmax>=3){
	     for(j=f1[mmax-1];j<=f1[mmax-1]+it[i][kmax]-1;j++){ map(i,j,'t',100); if(maperr==1) return;}
         }

  /* 2012 x_Qx */

	 if(fup[1]==2&&fup[2]==0&&fup[3]==1&&fup[4]==2&&f2[3]-f1[2]<it[i][kmin]+it[i][kmin+1]&&f2[3]-f1[2]<=it[i][kmin]&&kmin+1<=kmax&&mmax>=4){
	     for(j=f2[3];j>=f2[3]-it[i][kmin]+1;j--){ map(i,j,'t',100); if(maperr==1) return;}
         }
	 if(fup[mmax]==2&&fup[mmax-1]==0&&fup[mmax-2]==1&&fup[mmax-3]==2&&f2[mmax-1]-f1[mmax-2]<it[i][kmax]+it[i][kmax-1]&&f2[mmax-1]-f1[mmax-2]<=it[i][kmax]&&1<=kmax-1&&mmax>=4){
	     for(j=f1[mmax-2];j<=f1[mmax-2]+it[i][kmax]-1;j++){ map(i,j,'t',100); if(maperr==1) return;}
         }

/* 0102 _Q_x */

	 if(fup[1]==0&&fup[2]==1&&fup[3]==0&&fup[4]==2&&f2[3]-f1[1]<it[i][kmin]+it[i][kmin+1]&&f2[3]-f1[1]<it[i][kmin]&&kmin+1<=kmax&&mmax>=4){
	     for(j=f1[2];j<=f1[1]+it[i][kmin]-1;j++){ map(i,j,'t',100); if(maperr==1) return;}
	     for(j=f2[2];j>=f2[3]-it[i][kmin]+1;j--){ map(i,j,'t',100); if(maperr==1) return;}
	     for(j=f1[1]+it[i][kmin];j<=f2[3];j++){ map(i,j,'t',200); if(maperr==1) return;}
	     for(j=f2[3]-it[i][kmin];j>=f1[1];j--){ map(i,j,'t',200); if(maperr==1) return;}
         }

 	 if(fup[mmax]==0&&fup[mmax-1]==1&&fup[mmax-2]==0&&fup[mmax-3]==2&&f2[mmax]-f1[mmax-2]<it[i][kmax]+it[i][kmax-1]&&f2[mmax]-f1[mmax-2]<it[i][kmax]&&1<=kmax-1&&mmax>=4){
	     for(j=f2[mmax-1];j>=f2[mmax]-it[i][kmax]+1;j--){ map(i,j,'t',100); if(maperr==1) return;}
	     for(j=f1[mmax-1];j<=f1[mmax-2]+it[i][kmax]-1;j++){ map(i,j,'t',100); if(maperr==1) return;}
	     for(j=f2[mmax]-it[i][kmax];j>=f1[mmax-2];j--){ map(i,j,'t',200); if(maperr==1) return;}
	     for(j=f1[mmax-2]+it[i][kmax];j<=f2[mmax];j++){ map(i,j,'t',200); if(maperr==1) return;}
         }

/* 20102 x_Q_x */

	 if(fup[1]==2&&fup[2]==0&&fup[3]==1&&fup[4]==0&&fup[5]==2&&f2[4]-f1[2]<it[i][kmin]+it[i][kmin+1]&&f2[4]-f1[2]<it[i][kmin]&&kmin+1<=kmax&&mmax>=5){
	     for(j=f1[3];j<=f1[2]+it[i][kmin]-1;j++){ map(i,j,'t',100); if(maperr==1) return;}
	     for(j=f2[3];j>=f2[4]-it[i][kmin]+1;j--){ map(i,j,'t',100); if(maperr==1) return;}
	     for(j=f1[2]+it[i][kmin];j<=f2[4];j++){ map(i,j,'t',200); if(maperr==1) return;}
	     for(j=f2[4]-it[i][kmin];j>=f1[2];j--){ map(i,j,'t',200); if(maperr==1) return;}
         }

 	 if(fup[mmax]==2&&fup[mmax-1]==0&&fup[mmax-2]==1&&fup[mmax-3]==0&&fup[mmax-4]==2&&f2[mmax-1]-f1[mmax-3]<it[i][kmax]+it[i][kmax-1]&&f2[mmax-1]-f1[mmax-3]<it[i][kmax]&&1<=kmax-1&&mmax>=5){
	     for(j=f2[mmax-2];j>=f2[mmax-1]-it[i][kmax]+1;j--){ map(i,j,'t',100); if(maperr==1) return;}
	     for(j=f1[mmax-2];j<=f1[mmax-3]+it[i][kmax]-1;j++){ map(i,j,'t',100); if(maperr==1) return;}
	     for(j=f2[mmax-1]-it[i][kmax];j>=f1[mmax-3];j--){ map(i,j,'t',200); if(maperr==1) return;}
	     for(j=f1[mmax-3]+it[i][kmax];j<=f2[mmax-1];j++){ map(i,j,'t',200); if(maperr==1) return;}
         }
 
/* 201 x_Q */

	 if(fup[1]==2&&fup[2]==0&&fup[3]==1&&f2[3]-f1[2]<it[i][kmin]+it[i][kmin+1]&&f2[3]-f1[2]<it[i][kmin]&&kmin+1<=kmax&&mmax>=3){
	     for(j=f1[3];j<=f1[2]+it[i][kmin]-1;j++){ map(i,j,'t',100); if(maperr==1) return;}
 /*
 	     for(j=f2[3]-it[i][kmin];j>=f1[2];j--){ map(i,j,'t',200); if(maperr==1) return;}
*/
         }

 	 if(fup[mmax]==2&&fup[mmax-1]==0&&fup[mmax-2]==1&&f2[mmax-1]-f1[mmax-2]<it[i][kmax]+it[i][kmax-1]&&f2[mmax-1]-f1[mmax-2]<it[i][kmax]&&1<=kmax-1&&mmax>=3){
	     for(j=f2[mmax-2];j>=f2[mmax-1]-it[i][kmax]+1;j--){ map(i,j,'t',100); if(maperr==1) return;}
/*
 	     for(j=f1[mmax-2]+it[i][kmax];j<=f2[mmax-1];j++){ map(i,j,'t',200); if(maperr==1) return;}
*/
         }
      }
      newt[i]=50;
}

void bcheck2y(int i){
   int j,k,l,m,p,r,n,aflag;

      pchecky2(i);
      qchecky2(i);
      if(iy[i][KFIN]==0&&newy[i]==100){
         k=iy[i][KKK];
 	 lse(i,'y');
         fax1iy(i,ls,le);
/* 1 Q */

         if(fup[1]==1){ for(j=f1[1];j<=f1[1]+iy[i][kmin]-1;j++){ map(i,j,'y',100); if(maperr==1) return;}
         }
         if(fup[mmax]==1){ for(j=f2[mmax];j>=f2[mmax]-iy[i][kmax]+1;j--){ map(i,j,'y',100); if(maperr==1) return;}
         }
/* 21 xQ */
         if(fup[1]==2&&fup[2]==1&&mmax>=2){ for(j=f1[2];j<=f1[2]+iy[i][kmin]-1;j++){ map(i,j,'y',100); if(maperr==1) return;}
         }
         if(fup[mmax]==2&&fup[mmax-1]==1&&mmax>=2){ for(j=f2[mmax-1];j>=f2[mmax-1]-iy[i][kmax]+1;j--){ map(i,j,'y',100); if(maperr==1) return;}
         }
/* 02 _x */

	 if(fup[1]==0&&fup[2]==2&&fdw[1]<iy[i][kmin]){
	     for(j=f1[1];j<=f2[1];j++){ map(i,j,'y',200); if(maperr==1) return;}
         }
 	 if(fup[mmax]==0&&fup[mmax-1]==2&&fdw[mmax]<iy[i][kmax]){
	     for(j=f1[mmax];j<=f2[mmax];j++){ map(i,j,'y',200); if(maperr==1) return;}
         }
/* 202 x_x */

	 if(fup[1]==2&&fup[2]==0&&fup[3]==2&&fdw[2]<iy[i][kmin]){
	     for(j=f1[2];j<=f2[2];j++){ map(i,j,'y',200); if(maperr==1) return;}
         }
	 if(fup[mmax]==2&&fup[mmax-1]==0&&fup[mmax-2]==2&&fdw[mmax-1]<iy[i][kmax]){
	     for(j=f1[mmax-1];j<=f2[mmax-1];j++){ map(i,j,'y',200); if(maperr==1) return;}
         }

  /* 012 _Qx */

	 if(fup[1]==0&&fup[2]==1&&fup[3]==2&&f2[2]-f1[1]<iy[i][kmin]+iy[i][kmin+1]&&f2[2]-f1[1]<=iy[i][kmin]&&kmin+1<=kmax&&mmax>=3){
	     for(j=f2[2];j>=f2[2]-iy[i][kmin]+1;j--){ map(i,j,'y',100); if(maperr==1) return;}
         }

	 if(fup[mmax]==0&&fup[mmax-1]==1&&fup[mmax-2]==2&&f2[mmax]-f1[mmax-1]<iy[i][kmax]+iy[i][kmax-1]&&f2[mmax]-f1[mmax-1]<=iy[i][kmax]&&1<=kmax-1&&mmax>=3){
	     for(j=f1[mmax-1];j<=f1[mmax-1]+iy[i][kmax]-1;j++){ map(i,j,'y',100); if(maperr==1) return;}
         }

  /* 2012 x_Qx */

	 if(fup[1]==2&&fup[2]==0&&fup[3]==1&&fup[4]==2&&f2[3]-f1[2]<iy[i][kmin]+iy[i][kmin+1]&&f2[3]-f1[2]<=iy[i][kmin]&&kmin+1<=kmax&&mmax>=4){
	     for(j=f2[3];j>=f2[3]-iy[i][kmin]+1;j--){ map(i,j,'y',100); if(maperr==1) return;}
         }
	 if(fup[mmax]==2&&fup[mmax-1]==0&&fup[mmax-2]==1&&fup[mmax-3]==2&&f2[mmax-1]-f1[mmax-2]<iy[i][kmax]+iy[i][kmax-1]&&f2[mmax-1]-f1[mmax-2]<=iy[i][kmax]&&1<=kmax-1&&mmax>=4){
	     for(j=f1[mmax-2];j<=f1[mmax-2]+iy[i][kmax]-1;j++){ map(i,j,'y',100); if(maperr==1) return;}
         }

/* 0102 _Q_x */

	 if(fup[1]==0&&fup[2]==1&&fup[3]==0&&fup[4]==2&&f2[3]-f1[1]<iy[i][kmin]+iy[i][kmin+1]&&f2[3]-f1[1]<iy[i][kmin]&&kmin+1<=kmax&&mmax>=4){
	     for(j=f1[2];j<=f1[1]+iy[i][kmin]-1;j++){ map(i,j,'y',100); if(maperr==1) return;}
	     for(j=f2[2];j>=f2[3]-iy[i][kmin]+1;j--){ map(i,j,'y',100); if(maperr==1) return;}
	     for(j=f1[1]+iy[i][kmin];j<=f2[3];j++){ map(i,j,'y',200); if(maperr==1) return;}
	     for(j=f2[3]-iy[i][kmin];j>=f1[1];j--){ map(i,j,'y',200); if(maperr==1) return;}
         }

 	 if(fup[mmax]==0&&fup[mmax-1]==1&&fup[mmax-2]==0&&fup[mmax-3]==2&&f2[mmax]-f1[mmax-2]<iy[i][kmax]+iy[i][kmax-1]&&f2[mmax]-f1[mmax-2]<iy[i][kmax]&&1<=kmax-1&&mmax>=4){
	     for(j=f2[mmax-1];j>=f2[mmax]-iy[i][kmax]+1;j--){ map(i,j,'y',100); if(maperr==1) return;}
	     for(j=f1[mmax-1];j<=f1[mmax-2]+iy[i][kmax]-1;j++){ map(i,j,'y',100); if(maperr==1) return;}
	     for(j=f2[mmax]-iy[i][kmax];j>=f1[mmax-2];j--){ map(i,j,'y',200); if(maperr==1) return;}
	     for(j=f1[mmax-2]+iy[i][kmax];j<=f2[mmax];j++){ map(i,j,'y',200); if(maperr==1) return;}
         }

/* 20102 x_Q_x */

	 if(fup[1]==2&&fup[2]==0&&fup[3]==1&&fup[4]==0&&fup[5]==2&&f2[4]-f1[2]<iy[i][kmin]+iy[i][kmin+1]&&f2[4]-f1[2]<iy[i][kmin]&&kmin+1<=kmax&&mmax>=5){
	     for(j=f1[3];j<=f1[2]+iy[i][kmin]-1;j++){ map(i,j,'y',100); if(maperr==1) return;}
	     for(j=f2[3];j>=f2[4]-iy[i][kmin]+1;j--){ map(i,j,'y',100); if(maperr==1) return;}
	     for(j=f1[2]+iy[i][kmin];j<=f2[4];j++){ map(i,j,'y',200); if(maperr==1) return;}
	     for(j=f2[4]-iy[i][kmin];j>=f1[2];j--){ map(i,j,'y',200); if(maperr==1) return;}
         }

 	 if(fup[mmax]==2&&fup[mmax-1]==0&&fup[mmax-2]==1&&fup[mmax-3]==0&&fup[mmax-4]==2&&f2[mmax-1]-f1[mmax-3]<iy[i][kmax]+iy[i][kmax-1]&&f2[mmax-1]-f1[mmax-3]<iy[i][kmax]&&1<=kmax-1&&mmax>=5){
	     for(j=f2[mmax-2];j>=f2[mmax-1]-iy[i][kmax]+1;j--){ map(i,j,'y',100); if(maperr==1) return;}
	     for(j=f1[mmax-2];j<=f1[mmax-3]+iy[i][kmax]-1;j++){ map(i,j,'y',100); if(maperr==1) return;}
	     for(j=f2[mmax-1]-iy[i][kmax];j>=f1[mmax-3];j--){ map(i,j,'y',200); if(maperr==1) return;}
	     for(j=f1[mmax-3]+iy[i][kmax];j<=f2[mmax-1];j++){ map(i,j,'y',200); if(maperr==1) return;}
         }

/* 201 x_Q */

	 if(fup[1]==2&&fup[2]==0&&fup[3]==1&&f2[3]-f1[2]<iy[i][kmin]+iy[i][kmin+1]&&f2[3]-f1[2]<iy[i][kmin]&&kmin+1<=kmax&&mmax>=3){
	     for(j=f1[3];j<=f1[2]+iy[i][kmin]-1;j++){ map(i,j,'y',100); if(maperr==1) return;}
/*
  	     for(j=f2[3]-iy[i][kmin];j>=f1[2];j--){ map(i,j,'y',200); if(maperr==1) return;}
*/
         }


 	 if(fup[mmax]==2&&fup[mmax-1]==0&&fup[mmax-2]==1&&f2[mmax-1]-f1[mmax-2]<iy[i][kmax]+iy[i][kmax-1]&&f2[mmax-1]-f1[mmax-2]<iy[i][kmax]&&1<=kmax-1&&mmax>=3){
	     for(j=f2[mmax-2];j>=f2[mmax-1]-iy[i][kmax]+1;j--){ map(i,j,'y',100); if(maperr==1) return;}
/*
 	     for(j=f1[mmax-2]+iy[i][kmax];j<=f2[mmax-1];j++){ map(i,j,'y',200); if(maperr==1) return;}
*/
         }
      }
     newy[i]=50;
}

void mno_save1(){
   int i,j;
   FILE *fp,*ft;

   strcpy(ar3,ar2);
   strcat(ar3,".");
   sprintf(uuu,"%ld",nowsec);
   strcat(ar3,uuu);
   fp=fopen(ar3,"w");
   if(fp==NULL){
      printf("ファイル名が %s 失敗\n",ar3);
      exit(0);
   }
   else{
      for(i=1;i<=yokomax;i++){
         for(j=1;j<=tatemax;j++){
            if(mapflg==0){
               if( data[j][i]==  0) fputc('_',fp);
               if( data[j][i]==100) fputc('Q',fp);
               if( data[j][i]==200) fputc('x',fp);
            }
            if(mapflg==1){ //data2
               if( data[j][i]==  0) fputc('_',fp);
               if( data[j][i]==100) fputc('Q',fp);
               if( data[j][i]==200) fputc('x',fp);
            }
         }
         fputc('\n',fp);
      }
   }
   fclose(fp); 

   if(argc1<2) strcpy(filet,test);
   else strcpy(filet,ar2);
   strcat(filet,"2.mt");

   if(notimesave==1&&tt1>0) pt1s=tt1s;
   else{
      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }
   }
 
   if(notimesave==0){
      ft = fopen(filet,"w");
      if(ft==NULL){
         printf("ファイル名が %s 失敗\n",filet);
         exit(0);
      }

      fprintf(ft,"%4ld.%06ld",pt1s,pt1u);
      fclose(ft);
   }

       if(argc1<2) strcpy(filek,test);
       else strcpy(filek,ar2);
       strcat(filek,"m.karte");

       ft = fopen(filek,"a");
       if(ft==NULL){
           printf("ファイル名が %s 失敗\n",filek);
           exit(0);
       }
       fprintf(ft,"解析タイム=%4ld.%06ld秒　　dot=%ld    esf=%3ld.%06ld\n",pt1s,pt1u,nuri,esfs,esfu);
    fclose(ft);

            for(i=1;i<=yokomax;i++){
                for(j=1;j<=tatemax;j++){
                   if(data[j][i] == 100) box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,5);
                   if(data[j][i] == 200) box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,6);
                }
             }


   for(i=1;i<=yokomax;i++){
      if(i%5==0){
         box((kymax)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,6);
         box((kymax+tatemax+1)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,6);
      }
      if(i%10==0){
         box((kymax)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,5);
         box((kymax+tatemax+1)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,5);
      }
   }
   for(i=1;i<=tatemax;i++){
      if(i%5==0){
         box((kymax+i)*dot1+dot1/2+17,(ktmax)*dot1+dot1/2+27,5,6);
         box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+1)*dot1+dot1/2+27,5,6);
      }
      if(i%10==0){
         box((kymax+i)*dot1+dot1/2+17,(ktmax)*dot1+dot1/2+27,5,5);
         box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+1)*dot1+dot1/2+27,5,5);
      }
   }

      sprintf(sss,"Save");
      g_rgb(0xffffff); g_fill(600,0,70,13);
      g_rgb(0x0000ff); g_text(610,13,sss);
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);

}
void movedata(unsigned char d1[max][max],unsigned char d2[max][max],unsigned char zht1[max][NARABI],unsigned char zht2[max][NARABI],unsigned char zhy1[max][NARABI],unsigned char zhy2[max][NARABI],int zit1[max][NARABI],int zit2[max][NARABI],int ziy1[max][NARABI],int ziy2[max][NARABI]){

   int i,j;

            for(i=1;i<=yokomax;i++){
                for(j=1;j<=tatemax;j++){
                   if(d1[j][i]!=d2[j][i]){
                      if(d2[j][i] == 0&&startbb->data_white[j][i]==0) box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,18);
                      //if(d2[j][i] == 0) box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,18);
                      if(d1[j][i] == 100&&d2[j][i]==200){ box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,5);}
                      if(d1[j][i] == 200&&d2[j][i]==100){ box( (kymax+j)*dot1+20,(ktmax+i)*dot1+30,dot2,6);}
                   }
                }
             }
   nuri=0;
   for(i=1;i<=tatemax;i++){
      for(j=1;j<=yokomax;j++){
         d1[i][j]=d2[i][j];
         if(d1[i][j]) nuri++;
      }
   }
   for(i=1;i<=tatemax;i++){
      for(j=1;j<NARABI;j++){
         zit1[i][j]=zit2[i][j];
         zht1[i][j]=zht2[i][j];
      }
   }
   for(i=1;i<=yokomax;i++){
      for(j=1;j<NARABI;j++){
         ziy1[i][j]=ziy2[i][j];
         zhy1[i][j]=zhy2[i][j];
      }
   }
  
   //g_rgb(0xffffff);
   //g_fill(0,0,1200,700);


   for(i=1;i<=yokomax;i++){
      if(i%5==0){
         box((kymax)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,6);
         box((kymax+tatemax+1)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,6);
      }
      if(i%10==0){
         box((kymax)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,5);
         box((kymax+tatemax+1)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,5);
      }
      box((kymax+tatemax+2)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,18);
      if(iy[i][KFIN]) box((kymax+tatemax+2)*dot1+dot1/2+17,(ktmax+i)*dot1+dot1/2+27,5,18);
   }
   for(i=1;i<=tatemax;i++){
      if(i%5==0){
         box((kymax+i)*dot1+dot1/2+17,(ktmax)*dot1+dot1/2+27,5,6);
         box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+1)*dot1+dot1/2+27,5,6);
      }
      if(i%10==0){
         box((kymax+i)*dot1+dot1/2+17,(ktmax)*dot1+dot1/2+27,5,5);
         box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+1)*dot1+dot1/2+27,5,5);
      }
      box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+2)*dot1+dot1/2+27,5,18);
      if(it[i][KFIN]) box((kymax+i)*dot1+dot1/2+17,(ktmax+yokomax+2)*dot1+dot1/2+27,5,18);
  }
}

void movedata2(int st1[max][NARABI],int st2[max][NARABI],int sy1[max][NARABI],int sy2[max][NARABI],int et1[max][NARABI],int et2[max][NARABI],int ey1[max][NARABI],int ey2[max][NARABI]){


   int i,j;

    for(i=1;i<=tatemax;i++){
      for(j=1;j<NARABI;j++){
         st1[i][j]=st2[i][j];
         et1[i][j]=et2[i][j];
      }
   }
   for(i=1;i<=yokomax;i++){
      for(j=1;j<NARABI;j++){
         sy1[i][j]=sy2[i][j];
         ey1[i][j]=ey2[i][j];
      }
   }
}
 
struct line *node_create()
{
   struct line *from;
   int size;

   size=sizeof(struct line);
   from=(struct line *)malloc(size);
   if(!from){
      printf("out of memory \n");
      exit(1);
   }
   from->next=NULL;
   from->k=2;
   from->ty='t';
   from->fas=500;
   from->fau=0;

   return from;
}
 
struct backboard *backboard_create()
{
   struct backboard *from;
   int size;

   size=sizeof(struct backboard);
   from=(struct backboard *)malloc(size);
   if(!from){
      printf("out of memory \n");
      exit(1);
   }
   from->no=0;
   from->jotai=0;
   from->mujun=0;
   from->ltemp=0;
 
   return from;
}


struct line *shojun(temp)
struct line *temp;
{
   struct line *old;
   struct line *now;

   now=stt;
   old=NULL;

   if(!last){
      temp->next=NULL;
      last      =temp;
      return temp;
   }
   while(now){

      if(now->fas==temp->fas&&now->fau==temp->fau&&now->k < temp->k){
          old=now;
          now=now->next;
      }
      else if(now->fas==temp->fas&&now->fau<temp->fau){
          old=now;
          now=now->next;
      }
      else if(now->fas<temp->fas){
         old=now;
         now=now->next;
      }
      else{
         if(old){
            old ->next=temp;
            temp->next=now;
            return stt;
         }
         else{
            temp->next=now;
            return temp;
         }
      }
   }
   last->next=temp;
   temp->next=NULL;
   last      =temp;
   return stt;
}

 
 
void uu4checky(int i,int km,int ns[NARABI]){
   int p,pp,sm=0,n,n1;

S141:
   if(z3==1){ return; }

 
         ns[km]++;
         ne[km]++;
   if(mb[km+1]==0) mb[km+1]=ne[km]+1;

         if(ne[km] > bb[km]){
            if(kmin==km) ends=1;
            return;
         }

         if(nr[km][ns[km]]==1) goto S141;


         for(n=ns[km]; n<=ne[km]; n++){
            if(data[n][i]==200){ 
               ns[km]=n; ne[km]=ns[km]+iy[i][km]-1;
               
               goto S141;
            }
         }

         if(data[ns[km]-1][i]==100) goto S141;
         if(data[ne[km]+1][i]==100) goto S141;

         for(n=ne[km-1]+1; n<ns[km]; n++){
            if(data[n][i]==100){ goto S141;}
         }

   lgetc+=((le-ls)*(km-kmin));
   if(lgetc>LGETC){

      lgetc=0;
      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec -st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
   } 

   if(mapflg==1){
      pt3s=getsec -st3s;
      pt3u=getusec-st3u;
      if(pt3u<0){
         pt3u+=1000000;
         pt3s--;
      }
   }
   if(mapflg==1&&(dsf2s<pt3s||(dsf2s==pt3s&&dsf2u<pt3u))){ z3=1; return; }

   if((esfs<pt4s||(esfs==pt4s&&esfu<pt4u))&&TTN<k1){
      newy2[i]=00; z3=1;
      return;
   }

         ns[km+1]=ne[km]+1;
         ne[km+1]=ns[km+1]+iy[i][km+1]-1;


         while(kmin<=km&&km<kmax&&ends==0){ 
            uu4checky(i,km+1,ns);
            if(ends==0) goto S141;
         }
            for(p=kmin;p<=kmax;p++){
                for(n=ls;n<ns[p];n++){
                   nr[p][n]=1;
                }
                
            }

         zflag=0;
           
            for(n=ls; n<ns[kmin]; n++){
               if(data[n][i]==100){ goto S141;}
            }
            for(n=ne[kmax]+1; n<=le; n++){
               if(data[n][i]==100){ goto S141;}
            }

         for(p=kmin+1;p<=kmax;p++){
            for(n=ne[p-1]+1; n<ns[p]; n++){  z1[n]=0;   }
            
         }
         for(p=kmin;p<=kmax;p++){
            for(n=ns[p]; n<=ne[p]; n++){  z1[n]=1;     }
            
         }

            for(n=ls; n<ns[kmin]; n++){   z1[n]=0;     }
            
            for(n=ne[kmax]+1; n<=le; n++){    z1[n]=0;     }
            


         if(zflag==0){
            if(fff==0){
               fff=1;
               for(n=ls; n<=le; n++){
                  if(z1[n] == 1) d[n]=100;
               }
               
               dx++;
            }
            else{
               for(n=ls; n<=le; n++){
                  if(z1[n]==0&&d[n]==100) d[n]=50;
                  if(z1[n]==1&&d[n]==  0) d[n]=50;
               }
               
               dx++;
            }
         }
         goto S141;
}

void uu4checkt(int i,int km,int ns[NARABI]){
   int p,pp,sm,n,n1;

S142:
   if(z3==1) return;

 
         ns[km]++;
         ne[km]++;
   if(mb[km+1]==0) mb[km+1]=ne[km]+1;
         
         if(ne[km] > bb[km]){
            if(kmin==km) ends=1;
            return;
         }

        if(nr[km][ns[km]]==1) goto S142;

         for(n=ns[km]; n<=ne[km]; n++){
            if(data[i][n]==200){
               ns[km]=n; ne[km]=ns[km]+it[i][km]-1;
               
               goto S142;
            }
         }

         if(data[i][ns[km]-1]==100) goto S142;
         if(data[i][ne[km]+1]==100) goto S142;

         for(n=ne[km-1]+1; n<ns[km]; n++){
            if(data[i][n]==100){ goto S142;}
         }
 

   lgetc+=((le-ls)*(km-kmin));
   if(lgetc>LGETC){
      lgetc=0;
      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec -st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
  }
   if(mapflg==1){
      pt3s=getsec -st3s;
      pt3u=getusec-st3u;
      if(pt3u<0){
         pt3u+=1000000;
         pt3s--;
      }
   }
   if(mapflg==1&&(dsf2s<pt3s||(dsf2s==pt3s&&dsf2u<pt3u))){ z3=1; return; }

   if((esfs<pt4s||(esfs==pt4s&&esfu<pt4u))&&TTN<k1){
      newt2[i]=00; z3=1;
      return;
   }

         ns[km+1]=ne[km]+1;
         ne[km+1]=ns[km+1]+it[i][km+1]-1;

                  
       if(kmin<=km&&km<kmax&&ends==0){
            uu4checkt(i,km+1,ns);
            if(ends==0) goto S142;
       }
             for(p=kmin;p<=kmax;p++){
                for(n=ls;n<ns[p];n++){
                   nr[p][n]=1;
                }
               
             }

         zflag=0;
            for(n=ls; n<ns[kmin]; n++){
               if(data[i][n]==100){  goto S142;}
            }
            for(n=ne[kmax]+1; n<=le; n++){
               if(data[i][n]==100){  goto S142;}
            }
S146:

         for(p=kmin+1;p<=kmax;p++){
            for(n=ne[p-1]+1; n<ns[p]; n++){  z1[n]=0;   }
               
         }
         for(p=kmin;p<=kmax;p++){
            for(n=ns[p]; n<=ne[p]; n++){  z1[n]=1;     }
               
         }

            for(n=ls; n<ns[kmin]; n++){   z1[n]=0;     }
            
            for(n=ne[kmax]+1; n<=le; n++){    z1[n]=0;     }
            


         if(zflag==0){

             if(fff==0){
               fff=1;
               for(n=ls; n<=le; n++){
                  if(z1[n] == 1) d[n]=100;
               }
               
               dx++;
            }
            else{
               for(n=ls; n<=le; n++){
                  if(z1[n]==0&&d[n]==100) d[n]=50;
                  if(z1[n]==1&&d[n]==  0) d[n]=50;
               }
               
               dx++;
            }
         }
         goto S142;
}


void uu2checky(int i,int km,int ns[NARABI]){
   int p,pp,sm=0,n,n1,bx,m;

   ns[km]--;
   ne[km]--;

S111:
   if(z3==1){ return; }

 
         ns[km]++;
         ne[km]++;
 
         if(ne[km] > bb[km]){
            if(kmin==km) ends=1;
            return;
         }

         if(nr[km][ns[km]]==1){  goto S111;}


         for(n=ns[km]; n<=ne[km]; n++){
            if(data[n][i]==200){ 
               ns[km]=n; ne[km]=ns[km]+iy[i][km]-1;
               
               goto S111;
            }
         }

         if(data[ns[km]-1][i]==100) goto S111;
         if(data[ne[km]+1][i]==100) goto S111;

         for(n=ne[km-1]+1; n<ns[km]; n++){
            if(data[n][i]==100){  goto S111;}
        }


   lgetc+=((le-ls)*(km-kmin));
   if(lgetc>LGETC){
      lgetc=0;
      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec -st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
   /*printf("4558 pt4=%3ld.%06ld\n",pt4s,pt4u);*/
  }
   if(mapflg==1){
      pt3s=getsec -st3s;
      pt3u=getusec-st3u;
      if(pt3u<0){
         pt3u+=1000000;
         pt3s--;
      }
   }
   if(mapflg==1&&(dsf2s<pt3s||(dsf2s==pt3s&&dsf2u<pt3u))){ z3=1; return; }

   if((esfs<pt4s||(esfs==pt4s&&esfu<pt4u))&&TTN<k1){
      newy2[i]=00; z3=1;
      return;
   }


         if(ma[km]==0) ma[km]=1;
         else ns[km+1]=ne[km]+1;

         ne[km+1]=ns[km+1]+iy[i][km+1]-1;


         while(kmin<=km&&km<kmax&&ends==0){ 
            uu2checky(i,km+1,ns);
            if(ends==0) goto S111;
         }
            for(p=kmin;p<=kmax;p++){
                for(n=ls;n<ns[p];n++){
                   nr[p][n]=1;
                }
               
            }

            for(n=ls; n<ns[kmin]; n++){
               if(data[n][i]==100){  goto S111;}
            }
            for(n=ne[kmax]+1; n<=le; n++){
               if(data[n][i]==100){  goto S111;}
            }

         for(p=kmin+1;p<=kmax;p++){
            for(n=ne[p-1]+1; n<ns[p]; n++){  z1[n]=0;   }
               
         }
         for(p=kmin;p<=kmax;p++){
            for(n=ns[p]; n<=ne[p]; n++){  z1[n]=1;     }
               
         }

            for(n=ls; n<ns[kmin]; n++){   z1[n]=0;     }
               
            for(n=ne[kmax]+1; n<=le; n++){    z1[n]=0;     }
               
            if(fff==0){
               fff=1;
               for(n=ls; n<=le; n++){
                  if(z1[n] == 1) d[n]=100;
               }
               
               dx++;
            }
            else{
               for(n=ls; n<=le; n++){
                  if(z1[n]==0&&d[n]==100) d[n]=50;
                  if(z1[n]==1&&d[n]==  0) d[n]=50;
               }
               
               dx++;
            }

         goto S111;
}

void uu2checkt(int i,int km,int ns[NARABI]){
   int p,pp,sm,n,n1;

   ns[km]--;
   ne[km]--;

S112:
   if(z3==1) return;

         ns[km]++;
         ne[km]++;
         
         if(ne[km] > bb[km]){
            if(kmin==km) ends=1;
            return;
         }

         if(nr[km][ns[km]]==1) goto S112;

         for(n=ns[km]; n<=ne[km]; n++){
            if(data[i][n]==200){
               ns[km]=n; ne[km]=ns[km]+it[i][km]-1;
               
               goto S112;
            }
         }

         if(data[i][ns[km]-1]==100) goto S112;
         if(data[i][ne[km]+1]==100) goto S112;

         for(n=ne[km-1]+1; n<ns[km]; n++){
            if(data[i][n]==100){   goto S112;}
         }

   lgetc+=((le-ls)*(km-kmin));
   if(lgetc>LGETC){
      lgetc=0;
     gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec -st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
   }  
   if(mapflg==1){
      pt3s=getsec -st3s;
      pt3u=getusec-st3u;
      if(pt3u<0){
         pt3u+=1000000;
         pt3s--;
      }
   }
   if(mapflg==1&&(dsf2s<pt3s||(dsf2s==pt3s&&dsf2u<pt3u))){ z3=1; return; }

   if((esfs<pt4s||(esfs==pt4s&&esfu<pt4u))&&TTN<k1){
      newt2[i]=00; z3=1;
      return;
   }

         if(ma[km]==0) ma[km]=1;
         else ns[km+1]=ne[km]+1;

         ne[km+1]=ns[km+1]+it[i][km+1]-1;
                  
       if(kmin<=km&&km<kmax&&ends==0){
            uu2checkt(i,km+1,ns);
            if(ends==0) goto S112;
       }
             for(p=kmin;p<=kmax;p++){
                for(n=ls;n<ns[p];n++){
                   nr[p][n]=1;
                }
             }

            for(n=ls; n<ns[kmin]; n++){
               if(data[i][n]==100){ goto S112;}
            }
            for(n=ne[kmax]+1; n<=le; n++){
               if(data[i][n]==100){ goto S112;}
            }

         for(p=kmin+1;p<=kmax;p++){
            for(n=ne[p-1]+1; n<ns[p]; n++){  z1[n]=0;   }
                
         }
         for(p=kmin;p<=kmax;p++){
            for(n=ns[p]; n<=ne[p]; n++){  z1[n]=1;     }
                
         }

            for(n=ls; n<ns[kmin]; n++){   z1[n]=0;     }
                
            for(n=ne[kmax]+1; n<=le; n++){    z1[n]=0;     }
                
             if(fff==0){
               fff=1;
               for(n=ls; n<=le; n++){
                  if(z1[n] == 1) d[n]=100;
               }
               
               dx++;
            }
            else{
               for(n=ls; n<=le; n++){
                  if(z1[n]==0&&d[n]==100) d[n]=50;
                  if(z1[n]==1&&d[n]==  0) d[n]=50;
               }
               
               dx++;
            }

         goto S112;
}

void uuchecky(int i){

   int j,k,m,p,pp,sm,n,pflag;

      pchecky2(i);
      qchecky2(i);
      if(iy[i][KFIN]==0){
        lse(i,'y');
        k1=kmax-kmin+1;

         for(p=kmin; p<=kmax; p++){
            for(j=ls; j<=le; j++){
               nr[p][j]=0;
            }
         }

         for(j=ls; j<=le; j++){
            d[j]=0;
         }
         dx=0;


      for(p=kmin;p<=kmax;p++){
         ma[p]=0;
         ns[p]=mb[p]=ssy[i][p];
         bb[p]=eey[i][p];
      }

         ne[kmin]=ns[kmin]+iy[i][kmin]-1;
         ns[kmin-1]=ns[kmin];
         ne[kmin-1]=ne[kmin];


ends=0;
fff=0;
z3=0;
lgetc=0;
        
      gettime(); 
      st4s=getsec;
      st4u=getusec;
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

    uu2checky(i,kmin,ns);

      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec-st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
      nowvsec=pt1s;

      if(mapflg==1&&(dsf2s<pt3s||(dsf2s==pt3s&&dsf2u<pt3u))){
         newy2[i]=0;
         goto UUYE;
     }
     if((esfs<pt4s||(esfs==pt4s&&esfu<pt4u))&&TTN<k1){
         newy2[i]=0;
 
         FFF=esfs*1000000+esfu;
         FFF*=10;
         ffys[i]=FFF/1000000;
         ffyu[i]=FFF%1000000;

         goto UUYE;
      }
      ffys[i]=pt4s;
      ffyu[i]=pt4u;

      nowsec=(pt1s/BYO);
      if(oldsec!=nowsec){
         oldsec=nowsec;
         mno_save1();
      }

   z4=0;
         for(j=ls;j<=le;j++){
            if(dx!=0){
               if(data[j][i]==0&&d[j]==0){  map(i,j,'y',200);  if(maperr==1) return;z4=1;}
               if(data[j][i]==0&&d[j]==100){ map(i,j,'y',100);  if(maperr==1) return;z4=1;}
            }
         }


if(mapflg==0){
     eflag4=2;
     while(eflag4){
          eflag4=0;
          for(j=1;j<=yokomax;j++){
             if(newy[j]==100) bcheck2y(j);
             if(maperr==1) return;
          }  
         for(j=1;j<=tatemax;j++){
             if(newt[j]==100) bcheck2t(j);
             if(maperr==1) return;
         }
   }  
      ccheckt();
      if(maperr==1) return;
      cchecky();
      if(maperr==1) return;
}
/*
      pchecky2(i);
      qchecky2(i);
      if(iy[i][KFIN]==0){
         lse(i,'y');
         for(j=kmin;j<=kmax;j++){
            sum1iy( i,j,j,ssy[i][j],eey[i][j]);
            batu1iy(i,j,j,ssy[i][j],eey[i][j]);
         }
      }
*/
 
UUYE:i=i;
   }
   newy2[i]=0;
}


void uucheckt(int i){

   int j,k,m,p,pp,sm,n,pflag;

      pcheckt2(i);
      qcheckt2(i);
      if(it[i][KFIN]==0){
         lse(i,'t');
         k1=kmax-kmin+1;
 
         for(p=kmin; p<=kmax; p++){
            for(j=ls; j<=le; j++){
               nr[p][j]=0;
            }
         }
         for(j=ls; j<=le; j++){
            d[j]=0;
         }
         dx=0;
 

      for(p=kmin;p<=kmax;p++){
         ma[p]=0;
         ns[p]=mb[p]=sst[i][p];
         bb[p]=eet[i][p];
      }

         ne[kmin]=ns[kmin]+it[i][kmin]-1;
         ns[kmin-1]=ns[kmin];
         ne[kmin-1]=ne[kmin];
 
ends=0;
fff=0;
z3=0;
lgetc=0;

      gettime(); 
      st4s=getsec;
      st4u=getusec;
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }
       
    uu2checkt(i,kmin,ns);

      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec-st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
      nowvsec=(pt1s);

     if(mapflg==1&&(dsf2s<pt3s||(dsf2s==pt3s&&dsf2u<pt3u))){
         newt2[i]=0;
         goto UUTE;
     }
     if((esfs<pt4s||(esfs==pt4s&&esfu<pt4u))&&TTN<k1){
         newt2[i]=0;

         FFF=esfs*1000000+esfu;
         FFF*=10;
         ffts[i]=FFF/1000000;
         fftu[i]=FFF%1000000;

         goto UUTE;
      }
      ffts[i]=pt4s;
      fftu[i]=pt4u;

      nowsec=(pt1s/BYO);
      if(oldsec!=nowsec){
         oldsec=nowsec;
         mno_save1();
      }

    z4=0;
         for(j=ls;j<=le;j++){
            if(dx!=0){
               if(data[i][j]==0&&d[j]==0){  map(i,j,'t',200);  if(maperr==1) return;z4=1;}
               if(data[i][j]==0&&d[j]==100){ map(i,j,'t',100);  if(maperr==1) return;z4=1;}
            }
         }
if(mapflg==0){
     eflag4=2;
     while(eflag4){
          eflag4=0;
          for(j=1;j<=yokomax;j++){
             if(newy[j]==100) bcheck2y(j);
             if(maperr==1) return;
          }  
         for(j=1;j<=tatemax;j++){
             if(newt[j]==100) bcheck2t(j);
             if(maperr==1) return;
         }
   }  
      ccheckt();
      if(maperr==1) return;
      cchecky();
      if(maperr==1) return;
}
/*
      pcheckt2(i);
      qcheckt2(i);
      if(it[i][KFIN]==0){
         lse(i,'t');
         for(j=kmin;j<=kmax;j++){
            sum1it( i,j,j,sst[i][j],eet[i][j]);
            batu1it(i,j,j,sst[i][j],eet[i][j]);
         }
      }
*/
   }

UUTE:i=i;
   newt2[i]=0;
}
 
void uu0checky(int i){

   int j,k,m,p,pp,sm,n,pflag;

      pchecky2(i);
      qchecky2(i);
      if(iy[i][KFIN]==0){
        lse(i,'y');
        k1=kmax-kmin+1;
 
         for(p=kmin; p<=kmax; p++){
            for(j=ls; j<=le; j++){
               nr[p][j]=0;
            }
         }

         for(j=ls; j<=le; j++){
            d[j]=0;
         }
         dx=0;
  
         bed=le;
         for(p=kmax; p>=kmin; p--){
           bb[p]=bed;
           mb[p]=0;
            bed=bed-iy[i][p]-1;
         }

         ns[kmin]=ls;
         mb[kmin]=ls;
         ne[kmin]=ns[kmin]+iy[i][kmin]-1;
         ns[kmin-1]=ns[kmin];
         ne[kmin-1]=ne[kmin];
         ns[kmin]--;
         ne[kmin]--;
ends=0;
fff=0;
z3=0;
lgetc=0;
        
      gettime(); 
      st4s=getsec;
      st4u=getusec;
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

    uu4checky(i,kmin,ns);

      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec-st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
      nowvsec=pt1s;

      if(mapflg==1&&(dsf2s<pt3s||(dsf2s==pt3s&&dsf2u<pt3u))){
         newy2[i]=0;
         goto UU0YE;
     }
     if((esfs<pt4s||(esfs==pt4s&&esfu<pt4u))&&TTN<k1){
         newy2[i]=0;
 
         FFF=esfs*1000000+esfu;
         FFF*=10;
         ffys[i]=FFF/1000000;
         ffyu[i]=FFF%1000000;

         goto UU0YE;
      }
      ffys[i]=pt4s;
      ffyu[i]=pt4u;

      nowsec=(pt1s/BYO);
      if(oldsec!=nowsec){
         oldsec=nowsec;
         mno_save1();
      }

   z4=0;
         for(j=ls;j<=le;j++){
            if(dx!=0){
               if(data[j][i]==0&&d[j]==0){  map(i,j,'y',200);  if(maperr==1) return;z4=1;}
               if(data[j][i]==0&&d[j]==100){ map(i,j,'y',100);  if(maperr==1) return;z4=1;}
            }
         }

if(mapflg==0){
     eflag4=2;
     while(eflag4){
          eflag4=0;
          for(j=1;j<=yokomax;j++){
             if(newy[j]==100) bcheck2y(j);
             if(maperr==1) return;
          }  
         for(j=1;j<=tatemax;j++){
             if(newt[j]==100) bcheck2t(j);
             if(maperr==1) return;
         }
   }  
}

UU0YE:i=i;
   }
   newy2[i]=0;
}


void uu0checkt(int i){

   int j,k,m,p,pp,sm,n,pflag;

      pcheckt2(i);
      qcheckt2(i);
      if(it[i][KFIN]==0){
         lse(i,'t');
         k1=kmax-kmin+1;

         for(p=kmin; p<=kmax; p++){
            for(j=ls; j<=le; j++){
               nr[p][j]=0;
            }
         }
         for(j=ls; j<=le; j++){
            d[j]=0;
         }
         dx=0;
 
         bed=le;
         for(p=kmax; p>=kmin; p--){
            bb[p]=bed;
           mb[p]=0;
            bed=bed-it[i][p]-1;
         }

         ns[kmin]=ls;
         mb[kmin]=ls;
         ne[kmin]=ns[kmin]+it[i][kmin]-1;
         ns[kmin-1]=ns[kmin];
         ne[kmin-1]=ne[kmin];
         ns[kmin]--;
         ne[kmin]--;
ends=0;
fff=0;
z3=0;
lgetc=0;

      gettime(); 
      st4s=getsec;
      st4u=getusec;
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }
       
    uu4checkt(i,kmin,ns);

      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec-st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
      nowvsec=(pt1s);

     if(mapflg==1&&(dsf2s<pt3s||(dsf2s==pt3s&&dsf2u<pt3u))){
         newt2[i]=0;
         goto UU0TE;
     }
     if((esfs<pt4s||(esfs==pt4s&&esfu<pt4u))&&TTN<k1){
         newt2[i]=0;

         FFF=esfs*1000000+esfu;
         FFF*=10;
         ffts[i]=FFF/1000000;
         fftu[i]=FFF%1000000;

         goto UU0TE;
      }
      ffts[i]=pt4s;
      fftu[i]=pt4u;

      nowsec=(pt1s/BYO);
      if(oldsec!=nowsec){
         oldsec=nowsec;
         mno_save1();
      }

    z4=0;
         for(j=ls;j<=le;j++){
            if(dx!=0){
               if(data[i][j]==0&&d[j]==0){  map(i,j,'t',200);  if(maperr==1) return;z4=1;}
               if(data[i][j]==0&&d[j]==100){ map(i,j,'t',100);  if(maperr==1) return;z4=1;}
            }
         }

if(mapflg==0){
     eflag4=2;
     while(eflag4){
          eflag4=0;
          for(j=1;j<=yokomax;j++){
             if(newy[j]==100) bcheck2y(j);
             if(maperr==1) return;
          }  
         for(j=1;j<=tatemax;j++){
             if(newt[j]==100) bcheck2t(j);
             if(maperr==1) return;
         }
   }  
}
   }
UU0TE:i=i;
   newt2[i]=0;

}
 
void uubcheckt(int i,int km,int ns[NARABI]){
   int p,pp,sm=0,n,n1;

S162:
   if(z3==1||z3==2){ return; }

   lgetc+=((le-ls)*(km-kmin));
   if(lgetc>LGETC){
      lgetc=0;
     gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec -st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
   }  
   if(mapflg==1){
      pt3s=getsec -st3s;
      pt3u=getusec-st3u;
      if(pt3u<0){
         pt3u+=1000000;
         pt3s--;
      }
   }
   if(mapflg==1&&(dsf2s<pt3s||(dsf2s==pt3s&&dsf2u<pt3u))){ z3=2; return; }

   if((gsfs<pt4s||(gsfs==pt4s&&gsfu<pt4u))&&TTN<k1){
      newt2[i]=00; z3=2;
      return;
   }
 
         ns[km]++;
         ne[km]++;

         if(ne[km] > bb[km]){
            if(kmin==km) ends=1;
            return;
         }

         if(nr[km][ns[km]]==1){ goto S162;}

          for(n=ns[km]; n<=ne[km]; n++){
            if(d2[n]==200){ 
               ns[km]=n; ne[km]=ns[km]+it[i][km]-1;
               
               goto S162;
            }
         }

         if(d2[ns[km]-1]==100){ goto S162;}
         if(d2[ne[km]+1]==100){ goto S162;}

         for(n=ne[km-1]+1; n<ns[km]; n++){
            if(d2[n]==100){ goto S162;}
         }

                for(n=ls;n<ns[km];n++){
                   nr[km][n]=1;
                }

         ns[km+1]=ne[km]+1;
         ne[km+1]=ns[km+1]+it[i][km+1]-1;


         while(kmin<=km&&km<kmax&&ends==0){ 
            uubcheckt(i,km+1,ns);
            if(ends==0) goto S162;
         }
 
         for(n=ls; n<=le; n++){
               z1[n]=0;
               z2[n]=0;
         }
         for(p=kmin; p<=kmax; p++){
            for(n=ns[p]; n<=ne[p]; n++){
               z1[n]=1;
               z2[n]=1;
            }
         }
         for(n=ls; n<=le; n++){
            if(d2[n]==100)  z2[n]=1;
         }
          
         for(n=ls; n<=le; n++){
               if(z1[n] != z2[n]) goto S162;
         }

         z3=1;
         return;
         goto S162;
}


void uubchecky(int i,int km,int ns[NARABI]){
   int p,pp,sm=0,n,n1;

S161:
   if(z3==1||z3==2) return;
 

   lgetc+=((le-ls)*(km-kmin));
   if(lgetc>LGETC){
      lgetc=0;
     gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec -st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
   }  
   if(mapflg==1){
      pt3s=getsec -st3s;
      pt3u=getusec-st3u;
      if(pt3u<0){
         pt3u+=1000000;
         pt3s--;
      }
   }
   if(mapflg==1&&(dsf2s<pt3s||(dsf2s==pt3s&&dsf2u<pt3u))){ z3=2; return; }

   if((gsfs<pt4s||(gsfs==pt4s&&gsfu<pt4u))&&TTN<k1){
      newt2[i]=00; z3=2;
      return;
   }
 
         ns[km]++;
         ne[km]++;

         if(ne[km] > bb[km]){
            if(kmin==km) ends=1;
            return;
         }

         if(nr[km][ns[km]]==1){goto S161;}
 
         for(n=ns[km]; n<=ne[km]; n++){
            if(d2[n]==200){ 
               ns[km]=n; ne[km]=ns[km]+iy[i][km]-1;
               
               goto S161;
            }
         }

         if(d2[ns[km]-1]==100){ goto S161;}
         if(d2[ne[km]+1]==100){ goto S161;}

         for(n=ne[km-1]+1; n<ns[km]; n++){
            if(d2[n]==100){ goto S161;}
         }

         for(n=ls;n<ns[km];n++){
             nr[km][n]=1;
         }

         ns[km+1]=ne[km]+1;
         ne[km+1]=ns[km+1]+iy[i][km+1]-1;

         while(kmin<=km&&km<kmax&&ends==0){ 
            uubchecky(i,km+1,ns);
            if(ends==0) goto S161;
         }
 
         for(n=ls; n<=le; n++){
               z1[n]=0;
               z2[n]=0;
         }
         for(p=kmin; p<=kmax; p++){
            for(n=ns[p]; n<=ne[p]; n++){
               z1[n]=1;
               z2[n]=1;
            }
         }
         for(n=ls; n<=le; n++){
            if(d2[n]==100)  z2[n]=1;
         }

         for(n=ls; n<=le; n++){
               if(z1[n] != z2[n]) goto S161;
         }

         z3=1;             
         return;
         goto S161;
}

void uus(int itys){
   int p,j;            

         for(p=kmin; p<=kmax; p++){
            for(j=ls; j<=le; j++){
               nr[p][j]=0;
            }
         }

         ns[kmin]=ls;
         ne[kmin]=ns[kmin]+itys-1;
         ns[kmin-1]=ns[kmin];
         ne[kmin-1]=ne[kmin];
         ns[kmin]--;
         ne[kmin]--;
         ends=0;
         lgetc=0;

      gettime(); 
      st4s=getsec;
      st4u=getusec;
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }
   nowvsec=pt1s;
   if(oldvsec!=nowvsec){
      oldvsec=nowvsec;
      sprintf(sss,"TIME=%4ld.%06ld(sec)",pt1s,pt1u);
      g_rgb(0xffffff); g_fill(180,0,140,13);
      g_rgb(0xff0000); g_text(200,13,sss);
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);
      sprintf(sss,"TYPE-A %d",jcnt);
      g_rgb(0xffffff); g_fill(938,13,100,13);
      g_rgb(0x0000ff); g_text(940,26,sss);
      sprintf(sss,"fas=%3ld",fasi);
      g_rgb(0xffffff); g_fill(918,0,100,13);
      g_rgb(0x0000ff); g_text(920,13,sss);
   }
}

void uue(int i,char ty){
   int j;
if(!mapflg){
   if(ty=='y'){
      pchecky2(i);
      if(iy[i][KFIN]) return;
      bcheck2y(i);
   }
   if(ty=='t'){
      pcheckt2(i);
      if(it[i][KFIN]) return;
      bcheck2t(i);
   }
}
 
   if(ty=='y'){
      pchecky2(i);
      qchecky2(i);
      if(iy[i][KFIN]==0){
         lse(i,'y');
         for(j=kmin;j<=kmax;j++){
            sum1iy( i,j,j,ssy[i][j],eey[i][j]);
            batu1iy(i,j,j,ssy[i][j],eey[i][j]);
         }
      }
   }

   if(ty=='t'){
      pcheckt2(i);
      qcheckt2(i);
      if(it[i][KFIN]==0){
         lse(i,'t');
         for(j=kmin;j<=kmax;j++){
            sum1it( i,j,j,sst[i][j],eet[i][j]);
            batu1it(i,j,j,sst[i][j],eet[i][j]);
         }
      }
   }
   if(ty=='t'){
      pcheckt2(i);
      if(it[i][KFIN]==0){
         for(j=lsa-1;j<=lea+1;j++) d2[j]=data[i][j];
      }
   }
   if(ty=='y'){
      pchecky2(i);
      if(iy[i][KFIN]==0){
         for(j=lsa-1;j<=lea+1;j++) d2[j]=data[j][i];
      }
   }

}
 
void uuachecky(int i){

   int j,k,m,p,pp,sm,n,pflag,cc10;

      pchecky2(i);
      qchecky2(i);
      if(iy[i][KFIN]==0){
        lse(i,'y');
        lsa=ls;
        lea=le;
        k1=kmax-kmin+1;
 
         bed=le;
         for(p=kmax; p>=kmin; p--){
            bb[p]=bed;
            bed=bed-iy[i][p]-1;
         }

         
      gettime(); 
      st4s=getsec;
      st4u=getusec;
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      for(j=ls-1;j<=le+1;j++) d2[j]=data[j][i];

      if((le-ls+1)<CC10*2) cc10=(le-ls+1)/2;
      else                 cc10=CC10;

      FFF=(esfs*1000000+esfu)*5;
      gsfs=FFF/1000000;
      gsfu=FFF%1000000;

      for(j=ls;j<=ls+cc10&&j<=le;j++){
         if(d2[j]==0){
            uus(iy[i][kmin]);
            d2[j]=200;
            z3=0;
            uubchecky(i,kmin,ns);
            if(z3==0){
               map(i,j,'y',100);
               d2[j]=100;
               uue(i,'y');
            }
            else{
               uus(iy[i][kmin]);
               d2[j]=100;
               z3=0;
               uubchecky(i,kmin,ns);
               if(z3==0){
                  map(i,j,'y',200);
                  d2[j]=200;
                  uue(i,'y');
               }
               else d2[j]=0;
            }
         }
      }
      for(j=le;j>=le-cc10&&j>=ls;j--){
         if(d2[j]==0){
            uus(iy[i][kmin]);
            d2[j]=200;
            z3=0;
            uubchecky(i,kmin,ns);
            if(z3==0){
               map(i,j,'y',100);
               d2[j]=100;
               uue(i,'y');
            }
            else{
               uus(iy[i][kmin]);
               d2[j]=100;
               z3=0;
               uubchecky(i,kmin,ns);
               if(z3==0){
                  map(i,j,'y',200);
                  d2[j]=200;
                  uue(i,'y');
               }
               else d2[j]=0;
            }
         }
      }


      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec-st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
      nowvsec=pt1s;

      ffys[i]=pt4s;
      ffyu[i]=pt4u;


if(mapflg==0){
     eflag4=2;
     while(eflag4){
          eflag4=0;
          for(j=1;j<=yokomax;j++){
             if(newy[j]==100) bcheck2y(j);
             if(maperr==1) return;
          }  
         for(j=1;j<=tatemax;j++){
             if(newt[j]==100) bcheck2t(j);
             if(maperr==1) return;
         }
   }  
}
/*
      pchecky2(i);
      qchecky2(i);
      if(iy[i][KFIN]==0){
         lse(i,'y');
         for(j=kmin;j<=kmax;j++){
            sum1iy( i,j,j,ssy[i][j],eey[i][j]);
            batu1iy(i,j,j,ssy[i][j],eey[i][j]);
         }
      }
*/
   }
   newy2[i]=0;
}

 
void uuacheckt(int i){

   int j,k,m,p,pp,sm,n,pflag,cc10;

      pcheckt2(i);
      qcheckt2(i);
      if(it[i][KFIN]==0){
        lse(i,'t');
        lsa=ls;
        lea=le;
        k1=kmax-kmin+1;
 
         bed=le;
         for(p=kmax; p>=kmin; p--){
           bb[p]=bed;
           bed=bed-it[i][p]-1;
         }
         
      gettime(); 
      st4s=getsec;
      st4u=getusec;
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      for(j=ls-1;j<=le+1;j++) d2[j]=data[i][j];

      if((le-ls+1)<CC10*2) cc10=(le-ls+1)/2;
      else                 cc10=CC10;
 
      FFF=(esfs*1000000+esfu)*5;
      gsfs=FFF/1000000;
      gsfu=FFF%1000000;

      for(j=ls;j<=ls+cc10&&j<=le;j++){
         if(d2[j]==0){
            uus(it[i][kmin]);
            d2[j]=200;
            z3=0;
            uubcheckt(i,kmin,ns);
            if(z3==0){
               map(i,j,'t',100);
               d2[j]=100;
               uue(i,'t');
            }
            else{
               uus(it[i][kmin]);
               d2[j]=100;
               z3=0;
               uubcheckt(i,kmin,ns);
               if(z3==0){
                  map(i,j,'t',200);
                  d2[j]=200;
                  uue(i,'t');
               }
               else d2[j]=0;
            }
         }
      }
      for(j=le;j>=le-cc10&&j>=ls;j--){
         if(d2[j]==0){
            uus(it[i][kmin]);
            d2[j]=200;
            z3=0;
            uubcheckt(i,kmin,ns);
            if(z3==0){
               map(i,j,'t',100);
               d2[j]=100;
               uue(i,'t');
            }
            else{
               uus(it[i][kmin]);
               d2[j]=100;
               z3=0;
               uubcheckt(i,kmin,ns);
               if(z3==0){
                  map(i,j,'t',200);
                  d2[j]=200;
                  uue(i,'t');
               }
               else d2[j]=0;
            }
         }
      }


      gettime();
      pt1s=getsec-st1s+tt1s;
      pt1u=getusec-st1u;
      if(pt1u<0){
         pt1u+=1000000;
         pt1s--;
      }

      pt4s=getsec-st4s;
      pt4u=getusec-st4u;
      if(pt4u<0){
         pt4u+=1000000;
         pt4s--;
      }
      nowvsec=pt1s;
 
      ffts[i]=pt4s;
      fftu[i]=pt4u;
 

if(mapflg==0){
     eflag4=2;
     while(eflag4){
          eflag4=0;
          for(j=1;j<=yokomax;j++){
             if(newy[j]==100) bcheck2y(j);
             if(maperr==1) return;
          }  
         for(j=1;j<=tatemax;j++){
             if(newt[j]==100) bcheck2t(j);
             if(maperr==1) return;
         }
   }  
}
/*
      pcheckt2(i);
      qcheckt2(i);
      if(it[i][KFIN]==0){
         lse(i,'t');
         for(j=kmin;j<=kmax;j++){
            sum1it( i,j,j,sst[i][j],eet[i][j]);
            batu1it(i,j,j,sst[i][j],eet[i][j]);
         }
      }
*/
   }
   newt2[i]=0;
}




void scheckt(){

   int i,k,m,qs,n,p,j,j2,pp;

   for(i=1;i<=tatemax;i++){
      pcheckt2(i);
      if(it[i][KFIN]==0){
         k=it[i][KKK];
         j=1; m=1;

	 while(data[i][j]!=0 && m<=k && 1<=j&&j<=yokomax){
	    if(data[i][j]==100){
		n=it[i][m];
		while(n>0){
		   map(i,j,'t',100);
               if(maperr==1) return;
		   n--;
		   j++;
		}
		if(1<=j&&j<=yokomax){ map(i,j,'t',200);  if(maperr==1) return;
 }
		m++;
	    }
	    else if(data[i][j]==200);
	    else goto SCHT1;
	    j++;
	 }
SCHT1:
         j=yokomax; m=k;
	 while(data[i][j]!=0 && m>=1 && 1<=j&&j<=yokomax){
	    if(data[i][j]==100){
		n=it[i][m];
		while(n>0){
		   map(i,j,'t',100);
               if(maperr==1) return;
		   n--;
		   j--;
		}
		if(1<=j&&j<=yokomax){ map(i,j,'t',200);  if(maperr==1) return;
 } 
		m--;
	    }
	    else if(data[i][j]==200);
	    else goto SCHT2;
	    j--;
         }
SCHT2:i=i;
      }
   }

}

void schecky(){

   int i,k,m,qs,n,p,j,j2,pp;

   for(i=1;i<=yokomax;i++){
      pchecky2(i);
      if(iy[i][KFIN]==0){
         k=iy[i][KKK];
         j=1; m=1;
	 while(data[j][i]!=0 && m<=k && 1<=j&&j<=tatemax){
	    if(data[j][i]==100){
		n=iy[i][m];
		while(n>0){
		   map(i,j,'y',100);
               if(maperr==1) return;
		   n--;
		   j++;
		}
		if(1<=j&&j<=tatemax){ map(i,j,'y',200); if(maperr==1) return;}
		m++;
	    }
	    else if(data[j][i]==200);
	    else goto SCHY1;
	    j++;
	 }
SCHY1:
         j=tatemax; m=k;
	 while(data[j][i]!=0 && m>=1 && 1<=j&&j<=tatemax){
	    if(data[j][i]==100){
		n=iy[i][m];
		while(n>0){
		   map(i,j,'y',100);
               if(maperr==1) return;
		   n--;
		   j--;
		}
		if(1<=j&&j<=tatemax){ map(i,j,'y',200);  if(maperr==1) return;}
		m--;
	    }
	    else if(data[j][i]==200);
	    else goto SCHY2;
	    j--;
         }
SCHY2:i=i;
      }
   }

}


int katei3all(){
   int i,j,k,m,asa;

	  infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }

  g_rgb(0xffffff);
   g_fill(0,0,230,30);
   g_rgb(0x0000ff);
   g_text(20,20,"--sukima2a Katei--");
      for(i=1;i<=yokomax;i++){
         m=0;
         for(j=1;j<=tatemax;j++){
            if(data[j][i]==0) m++;
         }
         if(m==2){
            for(j=tatemax;j>=1;j--){
               if(data[j][i]==0){
 
	  infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
               if(data[j][i]==0){
                   k=katei3a(i,j);
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)  return 10;
               }
            }}
         }
      }            

   g_rgb(0xffffff);
   g_fill(0,0,230,30);
   g_rgb(0x0000ff);
   g_text(20,20,"--sukima2b Katei--");


	  infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }


      for(j=1;j<=tatemax;j++){
         m=0;
         for(i=1;i<=yokomax;i++){
            if(data[j][i]==0) m++;
         }
         if(m==2){
            for(i=yokomax;i>=1;i--){
               if(data[j][i]==0){
 
	  infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
               if(data[j][i]==0){
                  k=katei3a(i,j);
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)  return 10;
                   //movedata(data,data2,ht,ht2,hy,hy2,it,it2,iy,iy2);
               }
            }}
         }
     }

   g_rgb(0xffffff);
   g_fill(0,0,230,30);
   g_rgb(0x0000ff);
   g_text(20,20,"--sukima3a Katei--");


	  infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }



      for(i=1;i<=yokomax;i++){
         m=0;
         for(j=1;j<=tatemax;j++){
            if(data[j][i]==0) m++;
         }
         if(m==3){
            for(j=tatemax;j>=1;j--){

               if(data[j][i]==0){
	  infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
               if(data[j][i]==0){
                  k= katei3a(i,j);
   		  if(k==1) return 1;
  		  if(k==10) return 10;
                  if(fincount()==1)   return 10;
                   //movedata(data,data2,ht,ht2,hy,hy2,it,it2,iy,iy2);
               }
            }}
         }
      }            

   g_rgb(0xffffff);
   g_fill(0,0,230,30);
   g_rgb(0x0000ff);
   g_text(20,20,"--sukima3b Katei--");


	  infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }


      for(j=1;j<=tatemax;j++){
         m=0;
         for(i=1;i<=yokomax;i++){
            if(data[j][i]==0) m++;
         }
         if(m==3){
            for(i=yokomax;i>=1;i--){
               if(data[j][i]==0){
 
	  infobb=gcdatabb;
           if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
               if(data[j][i]==0){
                  k= katei3a(i,j);
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)  return 10;
                   //movedata(data,data2,ht,ht2,hy,hy2,it,it2,iy,iy2);
               }
            }}
         }
     }

   g_rgb(0xffffff);
   g_fill(0,0,230,30);
   g_rgb(0x0000ff);
   g_text(20,20,"--sukima4a Katei--");
 

	  infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }


     for(i=1;i<=yokomax;i++){
         m=0;
         for(j=1;j<=tatemax;j++){
            if(data[j][i]==0) m++;
         }
         if(m==4){
            for(j=1;j<=tatemax;j++){
               if(data[j][i]==0){
 
	  infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
               if(data[j][i]==0){
                   k=katei3a(i,j);
   		  if(k==1) return 1;
  		  if(k==10) return 10;
                  if(fincount()==1)   return 10;
                   //movedata(data,data2,ht,ht2,hy,hy2,it,it2,iy,iy2);
               }
            }}
         }
      }            

   g_rgb(0xffffff);
   g_fill(0,0,230,30);
   g_rgb(0x0000ff);
   g_text(20,20,"--sukima4b Katei--");
 

	  infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }



     for(j=1;j<=tatemax;j++){
         m=0;
         for(i=1;i<=yokomax;i++){
            if(data[j][i]==0) m++;
         }
         if(m==4){
            for(i=1;i<=yokomax;i++){
 
               if(data[j][i]==0){
 	  infobb=gcdatabb;
           if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
              if(data[j][i]==0){
                   k=katei3a(i,j);
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
                   //movedata(data,data2,ht,ht2,hy,hy2,it,it2,iy,iy2);
               }
            }}
         }
     }

 
   if(k==10) return 10;
   if(fincount()==1) return 10;
   return 0;
}


int katei1(){
   int nflg=0,i,j,k,n1,n2,n3,i2,j2;
   int nuriQ,nurix,nuriold,da;

   mapflg=1;
   g_rgb(0xffffff);
   g_fill(0,0,230,30);
   g_rgb(0x0000ff);
   g_text(20,20,"--Kado1 Katei--");

	   infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }

   j=1;
   i=1;
         if(data[j][i] ==00){
                    k=katei3a(i,j);
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;

         }
   
   j=tatemax;
   i=1;
         if(data[j][i] ==00){
                   k=katei3a(i,j);
  		  if(k==10) return 10;
  		  if(k==1) return 1;
                   if(fincount()==1)   return 10;

         }

   j=1;
   i=yokomax;
         if(data[j][i] ==00){
                   k=katei3a(i,j);
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
         }

   j=tatemax;
   i=yokomax;
         if(data[j][i] ==00){
                   k=katei3a(i,j);
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;

         }

   return 0;
}
 

int katei2(){
   int nflg=0,i,j,k,n1,n2,n3,i2,j2,h=8;
   int nuriQ,nurix,nuriold,da,c1=2;

   mapflg=1;
   g_rgb(0xffffff);
   g_fill(0,0,230,20);

   g_rgb(0x0000ff);
   g_text(20,20,"--Kado2 Katei--");
	   infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
K2TOP:
   mujunflg=0;

   j=1;
   for(i=1;i<=h;i++){
         if(data[j][i] ==00){
                    k=katei3a(i,j);
		  //if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
            
         }
    }
   i2=i;
   i=1;
   for(j=2;j<=h;j++){
         if(data[j][i] ==00){
                   k=katei3a(i,j);
		  //if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
           
         }
    }
   j2=j;
   for(i=2;i<i2;i++){
      for(j=2;j<j2;j++){
         if(data[j][i] ==00){
                   k=katei3a(i,j);
		  //if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
           
         }
       }
   }

    j=tatemax;
   for(i=1;i<=h;i++){
         if(data[j][i] ==00){
                    k=katei3a(i,j);
		  //if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
           
         }
   }
   i2=i;
   i=1;
   for(j=tatemax-1;j>=tatemax-h;j--){
         if(data[j][i] ==00){
                   k=katei3a(i,j);
		  //if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
           
         }
   }
   j2=j;

   for(i=2;i<i2;i++){
      for(j=tatemax-1;j>j2;j--){
         if(data[j][i] ==00){
                   k=katei3a(i,j);
		  //if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
           
         }
      }
   }
 
   i=yokomax;
   for(j=1;j<=h;j++){
         if(data[j][i] ==00){
                   k=katei3a(i,j);
		  //if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
           
         }
   }
    j2=j;
   j=1;
   for(i=yokomax-1;i>=yokomax-h;i--){
         if(data[j][i] ==00){
                    k=katei3a(i,j);
		  //if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
           
         }
    }
    i2=i;

   for(i=yokomax-1;i>i2;i--){
      for(j=2;j<j2;j++){
         if(data[j][i] ==00){
                   k=katei3a(i,j);
		  //if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
           
        }
       }
   }

    j=tatemax;
   for(i=yokomax;i>=yokomax-h;i--){
         if(data[j][i] ==00){
                   k=katei3a(i,j);
		  //if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
           
         }
    }
    i2=i;
   i=yokomax;
   for(j=tatemax-1;j>=tatemax-h;j--){
         if(data[j][i] ==00){
                   k=katei3a(i,j);
		  //if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
           
         }
   }
    j2=j;

   for(i=yokomax-1;i>i2;i--){
      for(j=tatemax-1;j>j2;j--){
         if(data[j][i] ==00){
                    k=katei3a(i,j);
		//  if(mujunflg) goto K2TOP;
  		  if(k==1) return 1;
  		  if(k==10) return 10;
                   if(fincount()==1)   return 10;
           
         }
      }
   }

    return 0;
}
 

int katei3(int i,int j){
   int nflg=0,k,n1,n2,n3,i2,j2,no;
   int nuriQ,nurix,nuriold,da;

           if(data[j][i] == 0){
            n1=n2=0;
            gcdatabb->next=backboard_create();
            gcdatabb=gcdatabb->next;
            gcdatabb->back=gc2bb;
	   infobb=gcdatabb->back;
             no=infobb->no;
            gcdatabb->no=no+1;
            gc2bb=gc2bb->next;
    //仮黒のロード
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
 
            gcdatabb->jj=j;
            gcdatabb->ii=i;
            gcdatabb->jotai=100;
            map(j,i,'t',100);
            gettime();
            st3s=getsec;
            st3u=getusec;
 
            maperr=0;
            gcdatabb->ltemp=22;
	    lpph();
  
	    eflag3=0;
            n1=rote0(R1F,0);
            if(n1==10) return 10;
            gcdatabb->b3=eflag3;

	    //仮黒のセーブ
             movedata(gcdatabb->data_black,data,gcdatabb->ht_black,ht,gcdatabb->hy_black,hy,gcdatabb->it_black,it,gcdatabb->iy_black,iy);
             movedata2(gcdatabb->sst_black,sst,gcdatabb->ssy_black,ssy,gcdatabb->eet_black,eet,gcdatabb->eey_black,eey);
          //仮白のロード
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
            gcdatabb->jotai=200;
            map(j,i,'t',200);
 
            gettime();
            st3s=getsec;
            st3u=getusec;
            maperr=0;
            gcdatabb->ltemp=33;
	    lpph();

 	    eflag3=0;
            n2=rote0(R1F,0);
            if(n2==10) return 10;
	    gcdatabb->w3=eflag3;

	    //仮白のセーブ
             movedata(gcdatabb->data_white,data,gcdatabb->ht_white,ht,gcdatabb->hy_white,hy,gcdatabb->it_white,it,gcdatabb->iy_white,iy);
             movedata2(gcdatabb->sst_white,sst,gcdatabb->ssy_white,ssy,gcdatabb->eet_white,eet,gcdatabb->eey_white,eey);


            if(n1==0&&n2==1){
		//黒
		if(gcdatabb->b3<(long)(tynuri/20)){
			gcdatabb=gcdatabb->back;
			gc2bb=gcdatabb;
			gcdatabb->next=NULL;
	    lpph();
		}
		else{
	    lpph();
            
                   gcdatabb->jotai=100;
		infobb=gcdatabb;
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
 			}            
                
            }
            else if(n1==1&&n2==0){
		//白
		if(gcdatabb->w3<(long)(tynuri/20)){
			gcdatabb=gcdatabb->back;
			gc2bb=gcdatabb;
			gcdatabb->next=NULL;
	    lpph();
		}
		else{
	    lpph();
                    gcdatabb->jotai=200;
	       }
            }
            else if(n1==0&&n2==0){
		if((gcdatabb->b3<(long)(tynuri/10))&&(gcdatabb->w3<(long)(tynuri/10))){
			gcdatabb=gcdatabb->back;
			gc2bb=gcdatabb;
			gcdatabb->next=NULL;
 	    lpph();
		}
		else{

		gcdatabb->ltemp=1;
 	    lpph();

		if(gcdatabb->mujun==0){
                    gcdatabb->mujun=2;
                    gcdatabb->jotai=200;
		}
		else if(gcdatabb->mujun==1){
                    gcdatabb->mujun=2;
                    gcdatabb->jotai=200;
		}
		else if(gcdatabb->mujun==2){
                    gcdatabb->mujun=3;
                    gcdatabb->jotai=100;
		infobb=gcdatabb;
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
		}
		else if(gcdatabb->mujun==3){
                    gcdatabb->mujun=7;
		    gcdatabb->ltemp=7;
                    gcdatabb->jotai=0;
		  return 5;
		}

 	    lpph();
		}
            }
            else if(n1==1&&n2==1){
		gcdatabb->ltemp=2;

	    lpph();

             if((gcdatabb->mujun==0||gcdatabb->mujun==3)&&gcdatabb->no>0){
                     gcdatabb->mujun=0;gcdatabb->ltemp=0;
                    gcdatabb->jotai=0;
		    //infobb=gcdatabb;
		   while((gcdatabb->mujun==0||gcdatabb->mujun==3)&&gcdatabb->no>0){
			   gcdatabb=gcdatabb->back;
			   gcdatabb->next=NULL;
		           gc2bb=gcdatabb;
		   }
 		   if(gcdatabb->mujun==1){
                       gcdatabb->mujun=2;
                       gcdatabb->jotai=200;
		infobb=gcdatabb;
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
		   }
		   else if(gcdatabb->mujun==2){
                       gcdatabb->mujun=3;
                       gcdatabb->jotai=100;
		infobb=gcdatabb;
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
		   }
 	    }
           else if(gcdatabb->jotai==100){
		gcdatabb->mujun=2;
		gcdatabb->jotai=200;
		infobb=gcdatabb;
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
	    }
           else if(gcdatabb->jotai==200){
		gcdatabb->mujun=3;
		gcdatabb->jotai=100;
		infobb=gcdatabb;
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
	    }
  
      		if(gcdatabb->no<=0){
                    g_rgb(0xff0000);
                    g_text(20,20,"ERROR !:yrote n1=n2=1");
                    while(1) hantei(); exit(0);
		}
            }
         }
   return 0;
   
}
 
int katei3a(int i,int j){ 					//こっちが主に
   int nflg=0,k,n1,n2,n3,i2,j2;
   int nuriQ,nurix,nuriold,da,no;

	mujunflg=0;
           if(data[j][i] == 0){
            n1=n2=0;
            gcdatabb->next=backboard_create();
            gcdatabb=gcdatabb->next;
            gcdatabb->back=gc2bb;
	   infobb=gcdatabb->back;
             no=infobb->no;
            gcdatabb->no=no+1;
            gc2bb=gc2bb->next;
     //仮黒のロード
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
 
            gcdatabb->jj=j;
            gcdatabb->ii=i;
            gcdatabb->jotai=100;
            map(j,i,'t',100);
            gettime();
            st3s=getsec;
            st3u=getusec;
 
            maperr=0;
            gcdatabb->ltemp=22;
	    lpph();
	    eflag3=0;
            n1=rote0(R1F,0);
            if(n1==10) return 10;
	    if(fincount()) return 10;
	    gcdatabb->b1=n1;
	    gcdatabb->b3=eflag3;

	    //仮黒のセーブ
             movedata(gcdatabb->data_black,data,gcdatabb->ht_black,ht,gcdatabb->hy_black,hy,gcdatabb->it_black,it,gcdatabb->iy_black,iy);
             movedata2(gcdatabb->sst_black,sst,gcdatabb->ssy_black,ssy,gcdatabb->eet_black,eet,gcdatabb->eey_black,eey);
          //仮白のロード
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
            gcdatabb->jotai=200;
            map(j,i,'t',200);
 
            gettime();
            st3s=getsec;
            st3u=getusec;
            maperr=0;
            gcdatabb->ltemp=33;
	    lpph();
 
	    eflag3=0;
            n2=rote0(R1F,0);
            if(n2==10) return 10;
	    if(fincount()) return 10;
	    gcdatabb->w1=n2;
	    gcdatabb->w3=eflag3;

	    //仮白のセーブ
             movedata(gcdatabb->data_white,data,gcdatabb->ht_white,ht,gcdatabb->hy_white,hy,gcdatabb->it_white,it,gcdatabb->iy_white,iy);
             movedata2(gcdatabb->sst_white,sst,gcdatabb->ssy_white,ssy,gcdatabb->eet_white,eet,gcdatabb->eey_white,eey);


            if(n1==0&&n2==1){
		//黒
		//if(gcdatabb->b3<(long)(tynuri/200)){
		if(0){
			gcdatabb=gcdatabb->back;
			gc2bb=gcdatabb;
			gcdatabb->next=NULL;
		       lpph();
		}
		else{
	    	      lpph();
            
 		//黒
                    gcdatabb->jotai=100;
	        infobb=gcdatabb;
                 movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
 		}              
            }
            else if(n1==1&&n2==0){
		//白
		if(((gcdatabb->b3-gcdatabb->w3)>tynuri/A12)&&(tatemax*yokomax==10000)){
		//if(0){
			gcdatabb->ltemp=46;
 			lpph();
			da=try1();
			if(da==10) return 10;
		}
		else{
	    lpph();
            
 		//白
                    gcdatabb->jotai=200;
		}
            }
            else if(n1==0&&n2==0){

		//どっちつかず,katei3a()

		//if((gcdatabb->b3<(long)(tynuri/100))&&(gcdatabb->w3<(long)(tynuri/100))){
		if(0){
			gcdatabb=gcdatabb->back;
			gc2bb=gcdatabb;
			gcdatabb->next=NULL;
	    lpph();
		}
		else{
            
 

		gcdatabb->ltemp=1;
	    lpph();

		if(gcdatabb->mujun==0){
                    gcdatabb->mujun=1;
                    gcdatabb->jotai=100;
		}
		else if(gcdatabb->mujun==1){
                    gcdatabb->mujun=2;
                    gcdatabb->jotai=200;
		}

		else if(gcdatabb->mujun==2){
                    gcdatabb->mujun=7;gcdatabb->ltemp=7;
                    gcdatabb->jotai=0;
		  return 5;
		}

	    lpph();
		}
            }
            else if(n1==1&&n2==1){
		mujunflg=1;
		gcdatabb->ltemp=2;
		lpph();

             if((gcdatabb->mujun==0||gcdatabb->mujun>=2)&&gcdatabb->no>0){
                     gcdatabb->mujun=0;gcdatabb->ltemp=0;
                    gcdatabb->jotai=0;
		   // infobb=gcdatabb;
		   while((gcdatabb->mujun==0||gcdatabb->mujun>=2)&&gcdatabb->no>0){
			   gcdatabb=gcdatabb->back;
			   gcdatabb->next=NULL;
		           gc2bb=gcdatabb;
		   }
 		   if(gcdatabb->mujun==1){
                       gcdatabb->mujun=2;
                       gcdatabb->jotai=200;
  	        infobb=gcdatabb;
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
          
		   }
  	    }
           else if(gcdatabb->jotai==100){
		gcdatabb->mujun=2;
		gcdatabb->jotai=200;
  
	        infobb=gcdatabb;
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
	    }
  
      		if(gcdatabb->no<=0){
                    g_rgb(0xff0000);
                    g_text(20,20,"ERROR !:yrote n1=n2=1");
                    while(1) hantei(); exit(0);
		}
            }
         }
   return 0;
   
   
}

int nokori10(int i, int j){
   int nflg=0,i1,j1,k,n1,n2,n3;
   int nuriQ,nurix,nuriold,da;

    return 0;
}
  
 
int nokori20(){
   int nflg=0,i,j,i1,j1,k,m,n1,n2,n3;
   int nuriQ,nurix,nuriold,da;
   FILE *ft;

NNTOP:
	mujunflg=0;

	  infobb=gcdatabb;
            if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }

      i=1;
      for(j=1;j<=tatemax;j++){
	  if(data[j][i]==0){

	  infobb=gcdatabb;
             if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
   infobb->ltemp=71;

	    lpph();
/*
               for(j1=1;j1<=tatemax;j1++){
	          if(data[j1][i]==0){
			j=j1;
			goto NN11;
		   }
		}

NN11:
*/
	    if(data[j][i]==0){
               //m=nokori10(i,j);
               m=katei3a(i,j);
  	       if(m==1) return 1;
  	       if(m==10) return 10;
               if(fincount()==1)   return 10;
            }
         } 
    } 
   

	  infobb=gcdatabb;
             if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }



      i=yokomax;
      for(j=tatemax;j>=1;j--){
	  if(data[j][i]==0){
	  infobb=gcdatabb;
             if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
   infobb->ltemp=72;

	    lpph();
/*
     		for(j1=tatemax;j1>=1;j1--){
	          if(data[j1][i]==0){
			j=j1;
			goto NN12;
		   }
		}

NN12:
*/
	    if(data[j][i]==0){
               //m=nokori10(i,j);
               m=katei3a(i,j);
  	       if(m==1) return 1;
  	       if(m==10) return 10;
               if(fincount()==1)   return 10;
            }
         } 
      }



	  infobb=gcdatabb;
             if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }

   
      j=1;
      for(i=1;i<=yokomax;i++){
	  if(data[j][i]==0){
	  infobb=gcdatabb;
             if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
  infobb->ltemp=73;

   lpph();

/*
               for(i1=1;i1<=yokomax;i1++){
	          if(data[j][i1]==0){
			i=i1;
			goto NN13;
		   }
		}

NN13:
*/
	    if(data[j][i]==0){
               //m=nokori10(i,j);
               m=katei3a(i,j);
  	       if(m==1) return 1;
  	       if(m==10) return 10;
               if(fincount()==1)   return 10;
            }
         }
      }

	  infobb=gcdatabb;
             if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
   

      j=tatemax;
      for(i=yokomax;i>=1;i--){
	  if(data[j][i]==0){
	  infobb=gcdatabb;
             if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
  infobb->ltemp=74;

	    lpph();
/*
     		for(i1=yokomax;i1>=1;i1--){
	          if(data[j][i1]==0){
			i=i1;
			goto NN14;
		   }
		}

NN14:
*/
	    if(data[j][i]==0){
               //m=nokori10(i,j);
               m=katei3a(i,j);
  	       if(m==1) return 1;
  	       if(m==10) return 10;
               if(fincount()==1)   return 10;
            }
         }
     } 
   

	  infobb=gcdatabb;
             if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }

   //i1=j1=0;

    for(i=2;i<=yokomax-1;i++){
      for(j=2;j<=tatemax-1;j++){
	  if(data[j][i]==0){
	  infobb=gcdatabb;
             if(infobb->jotai==100){
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);
            }
            if(infobb->jotai==200){
                movedata(data,infobb->data_white,ht,infobb->ht_white,hy,infobb->hy_white,it,infobb->it_white,iy,infobb->iy_white);
                movedata2(sst,infobb->sst_white,ssy,infobb->ssy_white,eet,infobb->eet_white,eey,infobb->eey_white);
            }
  infobb->ltemp=80;

	    lpph();
/*
            for(i1=i;i1<=yokomax-1;i1++){
               for(j1=j;j1<=tatemax-1;j1++){
	          if(data[j1][i1]==0){
			j=j1;i=i1;
			goto NN20;
		   }
		}
	    }
NN20:
*/
	    if(data[j][i]==0){
               //m=nokori10(i,j);
               m=katei3a(i,j);
 		if(mujunflg){
			i=gcdatabb->ii;
			j=gcdatabb->jj;
		}
  	       if(m==1) return 1;
  	       if(m==10) return 10;
               if(fincount()==1)   return 10;
            }
         }
      }
   }
//}}

   return 0;
}

int rote0(long dsfs,long dsfu){
   int si,i,j;

   mapflg=1;
   dsf2s=dsfs;
   dsf2u=dsfu;
 
   esfs=0;
   esfu=320000;
   TT10=10;
   i=rote(dsfs,dsfu);
   if(fincount()==1)  return 10;
   if(i==1)  return 1;

   return 0;
}


int rote(long dsfs,long dsfu){
   int si,i,j;

   mapflg=1;
   dsf2s=dsfs;
   dsf2u=dsfu;

 	    lpph();

      gettime();
      st3s=getsec;
      st3u=getusec;
 
      sprintf(sss,"TIME=%4ld.%06ld(sec)",pt1s,pt1u);
      g_rgb(0xffffff); g_fill(180,0,140,13);
      g_rgb(0xff0000); g_text(200,13,sss);
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);
 
   sprintf(sss,"b)esf=%3ld.%06ld",esfs,esfu);
   g_rgb(0xffffff); g_fill(850,38,160,13);
   g_rgb(0x0000ff); g_text(855,50,sss);

  
  
    for(i=0;i<=kk;i++){
      //it[i][KFIN]=0;
      //iy[i][KFIN]=0;
      newt[i]=100;
      newy[i]=100;
      newt2[i]=100;
      newy2[i]=100;
      newt3[i]=100;
      newy3[i]=100;
   }

   newz2();
   eflag=2;
   while(eflag>0){
      eflag=0;

      gettime();
      pt3s=getsec-st3s;
      pt3u=getusec-st3u;
      if(pt3u<0){
         pt3u+=1000000;
         pt3s--;
      }
      sprintf(sss,"TIME=%4ld.%06ld(sec)",pt1s,pt1u);
      g_rgb(0xffffff); g_fill(180,0,140,13);
      g_rgb(0xff0000); g_text(200,13,sss);
      sprintf(sss,"TIME3=%4ld.%06ld(sec)",pt3s,pt3u);
      g_rgb(0xffffff); g_fill(340,13,140,13);
      g_rgb(0xff0000); g_text(350,26,sss);

      eflag=0;
      sprintf(sss,"Dot=%ld/%ld",nuri,(long)tatemax*yokomax);
      g_rgb(0xffffff); g_fill(825,13,99,13);
      g_rgb(0x0000ff); g_text(830,26,sss);

      sprintf(sss,"TYPE-RS %d",jcnt);
      g_rgb(0xffffff); g_fill(938,13,100,13);
      g_rgb(0x0000ff); g_text(940,26,sss);

      nowsec=(pt1s/BYO);
      if(oldsec!=nowsec){
         oldsec=nowsec;
         mno_save1();
      }

 

   newz2();
   j=0;
   info=start;
   while(info&&j<500&&info->k<=TT10){
      eflag2=0;
      fasj=j;
      if(info->ty=='t'&&info->k<=TT10){ uucheckt(info->i); if(maperr==1) return 1;}
      if(info->ty=='y'&&info->k<=TT10){ uuchecky(info->i); if(maperr==1) return 1;}
      gettime();
      pt3s=getsec-st3s;
      pt3u=getusec-st3u;
      if(pt3u<0){
         pt3u+=1000000;
         pt3s--;
      }

   if(fincount()==1) return 10;
   if(maperr==1) return 1;
       j++;
      info=info->next;
   }
   if(eflag!=0) goto USKIP2;


   newz2();
   j=0;
   info=start;
   while(info&&j<500){
      eflag2=0;
      fasj=j;
      if(info->ty=='t'){ uucheckt(info->i); if(maperr==1) return 1;}
      if(info->ty=='y'){ uuchecky(info->i); if(maperr==1) return 1;}
      gettime();
      pt3s=getsec-st3s;
      pt3u=getusec-st3u;
      if(pt3u<0){
         pt3u+=1000000;
         pt3s--;
      }

   if(fincount()==1) return 10;
   if(maperr==1) return 1;
       j++;
      info=info->next;
   }
   if(eflag!=0) goto USKIP2;

   jcnt++;

      sprintf(sss,"TYPE-RA %d",jcnt);
      g_rgb(0xffffff); g_fill(938,13,100,13);
      g_rgb(0x0000ff); g_text(940,26,sss);

   newz2();
   j=0;
   info=start;
   while(info&&j<500&&info->k<=TT10){
      eflag2=0;
      fasj=j;
      if(info->ty=='t'&&info->k<=TT10){ uuacheckt(info->i); if(maperr==1) return 1;}
      if(info->ty=='y'&&info->k<=TT10){ uuachecky(info->i); if(maperr==1) return 1;}
      gettime();
      pt3s=getsec-st3s;
      pt3u=getusec-st3u;
      if(pt3u<0){
         pt3u+=1000000;
         pt3s--;
      }

   if(fincount()==1) return 10;
   if(maperr==1) return 1;
       j++;
      info=info->next;
   }
   if(eflag!=0) goto USKIP2;


      sprintf(sss,"TYPE-RB %d",jcnt);
      g_rgb(0xffffff); g_fill(938,13,100,13);
      g_rgb(0x0000ff); g_text(940,26,sss);

   newz2();
   j=0;
   info=start;
   while(info&&j<500&&eflag<=TT25){
      eflag2=0;
      fasj=j;
      if(info->ty=='t'){ uuacheckt(info->i); if(maperr==1) return 1;}
      if(info->ty=='y'){ uuachecky(info->i); if(maperr==1) return 1;}
      gettime();
      pt3s=getsec-st3s;
      pt3u=getusec-st3u;
      if(pt3u<0){
         pt3u+=1000000;
         pt3s--;
      }

   if(fincount()==1) return 10;
   if(maperr==1) return 1;
       j++;
      info=info->next;
   }
   if(eflag!=0) goto USKIP2;




USKIP2:


          for(j=1;j<=yokomax;j++){
               if(newy[j]==50)  newy[j]=100;
              // if(newy[j]==100) newy2[j]=100;
         }  
         for(j=1;j<=tatemax;j++){

               if(newt[j]==50)  newt[j]=100;
               //if(newt[j]==100) newt2[j]=100;
         }


      schecky();
      if(maperr==1) return 1;
      scheckt();
      if(maperr==1) return 1;
      else if(fincount()==1) return 10;
/*
      bcheckt();
      if(maperr==1) return 1;
      bchecky();
      if(maperr==1) return 1;
      else if(fincount()==1)  return 10;
*/
      v2it();
      if(maperr==1) return 1;
      v2iy();
      if(maperr==1) return 1;
      else if(fincount()==1)  return 10;

     loop1++;
  }
  return 0;
}


void printi(char yt,int i){
   int j,k,l;

   if(yt=='y'){
      printf("%c,%03d:",yt,i);
      for(l=1;l<=tatemax;l++){
	  printf("%d",l%10);
      }
      printf("\n");
      printf("%c,%03d:",yt,i);
      for(l=1;l<=tatemax;l++){
	  if(data[l][i]==0)   printf("_");
	  if(data[l][i]==100) printf("Q");
	  if(data[l][i]==200) printf("x");
      }
      printf("\n");
      k=iy[i][KKK];
      j=1;
      while(j<=k){
          if(hy[i][j]<4){
	     printf("\33[31m %d[%d,%d](%d,%d),\33[0m",iy[i][j],hy[i][j],uy[i][j],
               ssy[i][j],eey[i][j]);
          }
          else{
	     printf(" %d[%d,%d](%d,%d),",iy[i][j],hy[i][j],uy[i][j],
               ssy[i][j],eey[i][j]);
          }
	  j++;
      }
      lse(i,'y');
      printf(" kmin=%d,kmax=%d,ls=%d le=%d ",kmin,kmax,ls,le);
      printf("\n");
   }
   if(yt=='t'){
      printf("%c,%03d:",yt,i);
      for(l=1;l<=yokomax;l++){
	  printf("%d",l%10);
      }
      printf("\n");
      printf("%c,%03d:",yt,i);
      for(l=1;l<=yokomax;l++){
	  if(data[i][l]==0)   printf("_");
	  if(data[i][l]==100) printf("Q");
	  if(data[i][l]==200) printf("x");
      }
      printf("\n");
      k=it[i][KKK];
      j=1;
      while(j<=k){
          if(ht[i][j]<4){
	     printf("\33[31m %d[%d,%d](%d,%d),\33[0m",it[i][j],ht[i][j],ut[i][j],
              sst[i][j],eet[i][j]);
          }
          else{
	     printf(" %d[%d,%d](%d,%d),",it[i][j],ht[i][j],ut[i][j],
              sst[i][j],eet[i][j]);
          }
	  j++;
      }
      lse(i,'t');
      printf(" kmin=%d,kmax=%d,ls=%d le=%d ",kmin,kmax,ls,le);
      printf("\n");
   }
}
 
void ccheckt(){
   int i,j,k,l,m,p,r,n,aflag;

   for(i=1;i<=tatemax;i++){
      if(it[i][KFIN]==0){
         k=it[i][KKK];
         for(j=1;j<k;j++){
	    if(eet[i][j]<sst[i][j+1]){
		for(m=eet[i][j]+1;m<=sst[i][j+1]-1;m++){
		    if(data[i][m]==0){
                           map(i,m,'t',200);               if(maperr==1) return;
                    }
		}
	    }
	 }
         for(j=k;j>1;j--){
	    if(sst[i][j]>eet[i][j-1]){
		for(m=sst[i][j]-1;m>=eet[i][j-1]+1;m--){
		    if(data[i][m]==0){
                           map(i,m,'t',200);               if(maperr==1) return;
                    }	}   } }  }   }
}

void cchecky(){
   int i,j,k,l,m,p,r,n,aflag;

   for(i=1;i<=yokomax;i++){
      if(iy[i][KFIN]==0){
         k=iy[i][KKK];
         for(j=1;j<k;j++){
	    if(eey[i][j]<ssy[i][j+1]){
		for(m=eey[i][j]+1;m<=ssy[i][j+1]-1;m++){
		    if(data[m][i]==0){ 
                          map(i,m,'y',200);     if(maperr==1) return;
                    }	}   }	 }
         for(j=k;j>1;j--){
	    if(ssy[i][j]>eey[i][j-1]){
		for(m=ssy[i][j]-1;m>=eey[i][j-1]+1;m--){
		    if(data[m][i]==0){ 
                          map(i,m,'y',200);     if(maperr==1) return;
                    }
		}
	    }
	 }
      }
   }

}

void uniqy(){
   int i,j,k,l,l2,m,n;

   for(i=1;i<=yokomax;i++){
      if(iy[i][KFIN]==0){
         k=iy[i][KKK];
	 l=1;
	 m=iy[i][l];
	 while(l<=k){
	    if(uy[i][l]==0){
		m=iy[i][l];
		n=0;
		l2=l;
		while(l2<=k){
		   if(m==iy[i][l2]) n++;
		   l2++;
		}
		l2=l;
		while(l2<=k){
		   if(m==iy[i][l2]) uy[i][l2]=n;
		   l2++;
		}
	     }
	     l++;
	  }
      }
   }
}

void uniqt(){
   int i,j,k,l,l2,m,n;

   for(i=1;i<=tatemax;i++){
      if(it[i][KFIN]==0){
         k=it[i][KKK];
	 l=1;
	 m=it[i][l];
	 while(l<=k){
	    if(ut[i][l]==0){
		m=it[i][l];
		n=0;
		l2=l;
		while(l2<=k){
		   if(m==it[i][l2]) n++;
		   l2++;
		}
		l2=l;
		while(l2<=k){
		   if(m==it[i][l2]) ut[i][l2]=n;
		   l2++;
		}
	     }
	     l++;
	  }
      }
   }
/*
   for(i=1;i<=yokomax;i++){
      k=iy[i][KKK];
      printf("%d:",i);
      for(j=1;j<=k;j++){
	 printf("%d(%d) ",iy[i][j],uy[i][j]);
      }
      printf("\n");
   }
   for(i=1;i<=tatemax;i++){
      k=it[i][KKK];
      printf("%d:",i);
      for(j=1;j<=k;j++){
	 printf("%d(%d) ",it[i][j],ut[i][j]);
      }
      printf("\n");
   }
*/
}

void pcheckt3(int i){

   int j,k,l,km,m,p,a,b,c,d,e;
   int n,aflag,lsum,lg,ax,bx;

      if(it[i][KFIN]==0){
         fax1it(i,1,yokomax);
         k=it[i][KKK];

         a=0;
         for(j=1;j<=mmax;j++){
             if(fup[j]==1){
                  a++;
                  if(it[i][a]==fdw[j]){}
                  else return;
              }
          }
          if(a==k){
             for(j=1;j<=k;j++){
               mark(i,j,'t',255);
            }
            swe( i,'t');
            ksef(i,'t');
         }
     }
}


void pchecky3(int i){

   int j,k,l,km,m,p,a,b,c,d,e;
   int n,aflag,lsum,lg,ax,bx;

      if(iy[i][KFIN]==0){
         fax1iy(i,1,tatemax);
         k=iy[i][KKK];

         a=0;
         for(j=1;j<=mmax;j++){
             if(fup[j]==1){
                  a++;
                  if(iy[i][a]==fdw[j]){}
                  else return;
              }
          }
          if(a==k){
             for(j=1;j<=k;j++){
               mark(i,j,'y',255);
            }
            swe( i,'y');
            ksef(i,'y');
         }
     }
}


void lpph(){
  g_rgb(0xffffff); g_fill(795,70,230,500);
   g_rgb(0xcc0033); 

   lpp=startbb;
   while(lpp){
      sprintf(sss,"%02d %3d %3d %3d %3d %2d B%dW%d b%ldw%ld",lpp->no,lpp->ii,lpp->jj,lpp->jotai,lpp->mujun,lpp->ltemp,lpp->b1,lpp->w1,lpp->b3,lpp->w3);
      g_text(800,80+lpp->no*10,sss);
      lpp=lpp->next;
   }
}

int try1(){
    int n1,n2,no;
 
	gcdataff=backboard_create();
	gcdataff->ii=gcdatabb->ii;
	gcdataff->jj=gcdatabb->jj;
	gcdataff->b3=gcdatabb->b3;
	gcdataff->mujun=gcdatabb->mujun;
	gcdataff->jotai=gcdatabb->jotai;
TRY123:
	gcdatabb=startbb;
	while(gcdatabb){
		gc2bb=gcdatabb;
		gcdatabb=gcdatabb->next;
	}

		   gcdatabb=gc2bb;
                   gcdatabb->mujun=0;gcdatabb->ltemp=0;
                   gcdatabb->jotai=0;
		   while((gcdatabb->mujun==0||gcdatabb->mujun>=2)&&gcdatabb->no>0){
			   gcdatabb=gcdatabb->back;
			   gcdatabb->next=NULL;
		           gc2bb=gcdatabb;
		   }
                       gcdatabb->mujun=2;
                       gcdatabb->jotai=200;
		if(gcdatabb->no<=0){
                    g_rgb(0xff0000);
                    g_text(20,20,"ERROR !:yrote n1=n2=1");
                    while(1) hantei(); exit(0);
		}

	gcdatabb=gc2bb=startbb->next;
	while(gcdatabb){
		if(gcdatabb->mujun/*(gcdatabb->b3>10)*/||(gcdatabb->b3>tynuri/A12)||(gcdatabb->w3>tynuri/A12)){
/*
			if((gcdatabb->b3>tynuri/A12)&&(gcdatabb->w3>tynuri/A12)){
				
			}
			else if((gcdatabb->b3>tynuri/A12)&&(gcdatabb->w3<tynuri/A12)){
				gcdatabb->mujun=0;
				//gcdatabb->jotai=100;
				gcdatabb->ltemp=52;
			}
			else if((gcdatabb->b3<tynuri/A12)&&(gcdatabb->w3>tynuri/A12)){
				gcdatabb->mujun=0;
				//gcdatabb->jotai=200;
				gcdatabb->ltemp=53;
			}
*/
		}
		else{
			if(gcdatabb->next){
				gc2bb=gcdatabb->back;
				infobb=gcdatabb->next;
				gc2bb->next=infobb;
				infobb->back=gc2bb;
				gcdatabb=NULL;
				gcdatabb=gc2bb;
			}
			else{
				gc2bb=gcdatabb->back;
				gc2bb->next=NULL;
				gcdatabb=gc2bb;
			}
		}
		gc2bb=gcdatabb;
		gcdatabb=gcdatabb->next;
	}
	no=1;

	gcdatabb=gc2bb;
	if(gcdataff){
		gcdatabb->next=backboard_create();
		gcdatabb=gcdatabb->next;
		gcdatabb->back=gc2bb;
		gc2bb=gc2bb->next;
		gcdatabb->ii=gcdataff->ii;
		gcdatabb->jj=gcdataff->jj;
		gcdatabb->mujun=0;
		gcdatabb->jotai=100;
		gcdatabb->ltemp=117;
/*
		if((gcdataff->b3)>(tynuri/A15)){

			if(gcdataff->mujun==0){
				gcdatabb->mujun=1;
				gcdatabb->jotai=100;
				gcdatabb->ltemp=119;
			}
			else{
				gcdatabb->mujun=2;
				gcdatabb->jotai=200;
				gcdatabb->ltemp=121;
			}
		}
*/
		gcdataff=NULL;
	}

		infobb=startbb;
                movedata(data,infobb->data_black,ht,infobb->ht_black,hy,infobb->hy_black,it,infobb->it_black,iy,infobb->iy_black);
                movedata2(sst,infobb->sst_black,ssy,infobb->ssy_black,eet,infobb->eet_black,eey,infobb->eey_black);

	gcdatabb=startbb->next;
	while(gcdatabb){
		gcdatabb->no=no++;
		map(gcdatabb->jj,gcdatabb->ii,'t',gcdatabb->jotai);
		gc2bb=gcdatabb;
		gcdatabb=gcdatabb->next;
	}

	//lpph();
             gettime();
            st3s=getsec;
            st3u=getusec;
 
            maperr=0;
	    gcdatabb=gc2bb;
            gcdatabb->ltemp=47;
	    lpph();
	    eflag3=0;
            n1=rote0(R1F,0);
	    if(gcdatabb->jotai==100){
		 gcdatabb->b1=n1;
		 gcdatabb->b3=eflag3;
	    //仮黒のセーブ
             movedata(gcdatabb->data_black,data,gcdatabb->ht_black,ht,gcdatabb->hy_black,hy,gcdatabb->it_black,it,gcdatabb->iy_black,iy);
             movedata2(gcdatabb->sst_black,sst,gcdatabb->ssy_black,ssy,gcdatabb->eet_black,eet,gcdatabb->eey_black,eey);
	    }
	    if(gcdatabb->jotai==200){
		 gcdatabb->w1=n1;
	         gcdatabb->w3=eflag3;
	    //仮白のセーブ
             movedata(gcdatabb->data_white,data,gcdatabb->ht_white,ht,gcdatabb->hy_white,hy,gcdatabb->it_white,it,gcdatabb->iy_white,iy);
             movedata2(gcdatabb->sst_white,sst,gcdatabb->ssy_white,ssy,gcdatabb->eet_white,eet,gcdatabb->eey_white,eey);
	    }
            if(n1==10) return 10;
	    if(n1==1){
printf("8040\n");
		//n1=1, escape ~~goto TRY123
		mujunflg=1;
		goto TRY123;

	    }

   return 0;
}


