/* * Last edited: April 01 16:00 1996 (eichen) */
#include "genpari.h"
#include <sys/time.h>
#include <sys/resource.h>

typedef char *PERMUTATION;
typedef char **GROUP;
typedef char **RESOLVANTE;

void ranger(),itoa(),reverse(),preci(),tschirn(),rangeroots(),rearrange();
void desallocresolv(),desallocgroup(),setcardgroup(),printperm(),permaff();
void heure(),moreprec();
char chn[100],ch[5];
long duree(),tssun,debug;
long getcardgroup(),suffprec(),N,PRMAX,TSCHMAX,coeff[9][10];
long compareupletlong(),isin_G_H();
PERMUTATION permmul(),sid;
GROUP lirecoset(),allocgroup();
RESOLVANTE allocresolv(),lireresolv();
GEN EPS;
GEN monomial(),gpolynomial(),gpoly();

char *chainresolv,*chaincoset;
long closure8(),galoisprim8(),galoisimpodd8(),galoisimpeven8();
long closure9(),galoisprim9(),galoisimpodd9(),galoisimpeven9();
long closure10(),galoisprim10(),galoisimpodd10(),galoisimpeven10();
long closure11(),galoisodd11(),galoiseven11();
PERMUTATION data8(),data9(),data10(),data11();
long galoismodulo8(),galoismodulo9(),galoismodulo10(),galoismodulo11();

long TYP8[23][9],*(GR8[49]),numerotyp8(),rayergrouppair8(),rayergroupimpair8();
long TYP9[31][10],*(GR9[33]),numerotyp9(),rayergrouppair9(),rayergroupimpair9();
long TYP10[43][11],*(GR10[45]),numerotyp10(),rayergrouppair10(),rayergroupimpair10();
long TYPPAIR11[9][12],TYPIMPAIR11[6][12],GROUPPAIR11[6],GROUPIMPAIR11[4];
long numeropair11(),numeroimpair11(),rayergrouppair11(),rayergroupimpair11();

main(int argv,char **argc) /* le premier argument est le niveau de debugage (0 ou 1)
			      le second est la precision i.e. nb. de digits en base 10 */
{
 char s[500];
 long i,l1,l2,av0,av1,tetpil,ga,precis,car,nogroup,deg,cardgal,pargal,nogal,nbdig;
 GEN pol,dpol,ff,ff2,gal,an;
 
 chaincoset="COS";
 chainresolv="RES";

 if(argv<=1){precis=5;nbdig=28;debug=0;}
 else if(argv<=2){precis=5;nbdig=28;sscanf(argc[1],"%ld",&debug);}
 else{sscanf(argc[1],"%ld",&debug);sscanf(argc[2],"%ld",&nbdig);precis=nbdig/9.63296+2;}
 if(precis<3) precis=3;
 init(20000000,500000);av0=avma;EPS=gpuigs(gdeux,-16*(precis-2));av1=avma;
 printf("\n          Computation of the Galois group of a polynomial ");
 printf("of degree <= 11.\n");
 printf("                           (decimal precision = %ld)\n\n",nbdig);fflush(stdout);
 printf("Type the polynomial : ");fflush(stdout);fflush(stdin);scanf("%s",s);
 pol=lisexpr(s);ff=factor(pol);ff2=(GEN)ff[2];
 l1=lg(ff2)-1;l2=itos((GEN)ff2[1]);
 if((l1>1)||(l2>1))
 {
  printf("\n     Non irreducible polynomial : not implemented.\n");
  output(ff);fflush(stdout);avma=av0;exit(0);
 }
 deg=lgef(pol)-3;N=deg;sid=(char*)malloc(N+1);sid[0]=N;for(i=1;i<=N;i++) sid[i]=i;
 pol=gdiv(pol,content(pol));an=compo(pol,deg+1);
 pol=gsubst(pol,0,gdiv(polx[0],an));
 an=gpui(an,stoi(deg-1),precis);tetpil=avma;
 pol=gerepile(av1,tetpil,gmul(an,pol));av1=avma;
 if(deg<8)
 {
  heure();gal=galois(pol,precis);
  cardgal=itos((GEN)gal[1]);pargal=itos((GEN)gal[2]);nogal=itos((GEN)gal[3]);
  if(deg==1)printf("\n     The Galois group of the polynomial is S_1.\n");
  else if(deg==2)printf("\n     The Galois group of the polynomial is S_2.\n");
  else if(deg==3)
  {
   if(cardgal==3)printf("\n     The Galois group of the polynomial is C_3, even.\n");
   if(cardgal==6)printf("\n     The Galois group of the polynomial is S_3, odd.\n");
  }
  else if(deg==4)
  {
   if(cardgal==4)
   {
    if(pargal==-1)printf("\n     The Galois group of the polynomial is C_4, odd.\n");
    if(pargal==1)printf("\n     The Galois group of the polynomial is V_4, even.\n");
   }
   else if(cardgal==8)
    printf("\n     The Galois group of the polynomial is D_4, odd.\n");
   else if(cardgal==12)
    printf("\n     The Galois group of the polynomial is A_4, even.\n");
   else printf("\n     The Galois group of the polynomial is S_4, odd.\n");
  }
  else if(deg==5)
  {
   if(cardgal==5)printf("\n     The Galois group of the polynomial is C_5, even.\n");
   else if(cardgal==10)
    printf("\n     The Galois group of the polynomial is D_5, even.\n");
   else if(cardgal==20)
    printf("\n     The Galois group of the polynomial is F_20 (ordre 20), odd.\n");
   else if(cardgal==60)
    printf("\n     The Galois group of the polynomial is A_5, even.\n");
   else printf("\n     The Galois group of the polynomial is S_5, odd.\n");
  }
  else if(deg==6)
  {
   if(cardgal==6)
   {
    if(nogal==1) printf("\n     The Galois group of the polynomial is C_6, odd.\n");
    else if(nogal==2) printf("\n     The Galois group of the polynomial is S_3, odd.\n");
   }
   else if(cardgal==12)
   {
    if(pargal==-1)printf("\n     The Galois group of the polynomial is D_6, odd.\n");
    else if(pargal==1)
     printf("\n     The Galois group of the polynomial is A_4, even.\n");
   }
   else if(cardgal==18)
    printf("\n     The Galois group of the polynomial is G_18 (ordre 18), odd.\n");
   else if(cardgal==24)
   {
    if(pargal==-1)
    {
     if(nogal==1) printf("\n     The Galois group of the polynomial is S_4-, odd.\n");
     else printf("\n     The Galois group of the polynomial is A_4 x C_2, odd.\n");
    }
    else printf("\n     The Galois group of the polynomial is S_4+, even.\n");
   }
   else if(cardgal==36)
   {
    if(pargal==-1)
     printf("\n     The Galois group of the polynomial is G_36- (ordre 36), odd.\n");
    else
     printf("\n     The Galois group of the polynomial is G_36+ (ordre 36), even.\n");
   }
   else if(cardgal==48)
    printf("\n     The Galois group of the polynomial is S_4 x C_2, odd.\n");
   else if(cardgal==60)
    printf("\n     The Galois group of the polynomial is A_5=PSL(2,5), even.\n");
   else if(cardgal==72)
    printf("\n     The Galois group of the polynomial is G_72 (ordre 72), odd.\n");
   else if(cardgal==120)
    printf("\n     The Galois group of the polynomial is S_5=PGL(2,5), odd.\n");
   else if(cardgal==360)
    printf("\n     The Galois group of the polynomial is A_6, even.\n");
   else if(cardgal==720)
    printf("\n     The Galois group of the polynomial is S_6, odd.\n");
  }
  else if(deg==7)
  {
   if(cardgal==7) printf("\n     The Galois group of the polynomial is C_7, even.\n");
   else if(cardgal==14)
    printf("\n     The Galois group of the polynomial is D_7, odd.\n");
   else if(cardgal==21)
    printf("\n     The Galois group of the polynomial is F_21, even.\n");
   else if(cardgal==42)
    printf("\n     The Galois group of the polynomial is F_42, odd.\n");
   else if(cardgal==168)
    printf("\n     The Galois group of the polynomial is PSL(2,7)=PSL(3,2), even.\n");
   else if(cardgal==2520)
    printf("\n     The Galois group of the polynomial is A_7, even.\n");
   else printf("\n     The Galois group of the polynomial is S_7, odd.\n");
  }
  printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
 }
 else
 {    
  dpol=discsr(pol);
  if(debug)
  {
    printf(     "Working with reduced polynomial #1 = ");bruteall(pol,'g',-1,0);
    printf("\n");fflush(stdout);
    printf(     "Pol. discriminant = ");sor(dpol,'g',-1,0);printf("\n");fflush(stdout);
  }
  heure();car=carreparfait(dpol);avma=av1;
  if(debug)
  {if(car) printf("EVEN group\n");else printf("ODD group\n");fflush(stdout);}
  if(deg==8)
  {
   nogroup=galoismodulo8(pol,car);
   if(nogroup==49)
   {
    printf("\n     The Galois group of the polynomial is T_8[49]=A_8.\n");
    printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
   }
   else if(nogroup==50)
   {
    printf("\n     The Galois group of the polynomial is T_8[50]=S_8.\n");
    printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
   }
   else
   {
    ga=closure8(pol,car,precis);
    printf("\n     The Galois group of the polynomial is T_8[%ld].\n",ga);
    printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
   }
  }
  else if(deg==9)
  {
   nogroup=galoismodulo9(pol,car);
   if(nogroup==33)
   {
    printf("\n     The Galois group of the polynomial is T_9[33]=A_9.\n");
    printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
   }
   else if(nogroup==34)
   {
    printf("\n     The Galois group of the polynomial is T_9[34]=S_9.\n");
    printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
   }
   else
   {
    ga=closure9(pol,car,precis);
    printf("\n     The Galois group of the polynomial is T_9[%ld].\n",ga);
    printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
   }
  }
  else if(deg==10)
  {
   nogroup=galoismodulo10(pol,car);
   if(nogroup==44)
   {
    printf("\n     The Galois group of the polynomial is T_10[44]=A_10.\n");
    printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
   }
   else if(nogroup==45)
   {
    printf("\n     The Galois group of the polynomial is T_10[45]=S_10.\n");
    printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
   }
   else
   {
    ga=closure10(pol,car,precis);
    printf("\n     The Galois group of the polynomial is T_10[%ld].\n",ga);
    printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
   }
  }
  else if(deg==11)
  {
   nogroup=galoismodulo11(pol,car);
   if(nogroup==1)
   {
    if(car)
    {
     printf("\n     The Galois group of the polynomial is T_11[7]=A_11.\n");
     printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
    }
    else
    {
     printf("\n     The Galois group of the polynomial is T_11[8]=S_11.\n");
     printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
    }
   }
   else
   {
    ga=closure11(pol,car,precis);
    printf("\n     The Galois group of the polynomial is T_11[%ld].\n",ga);
    printf("     Computation time : %ld seconds.\n",duree());fflush(stdout);
   }
  }
  else{printf("\n\n***** Degree > 11 : not implemented. *****\n\n");fflush(stdout);}
 }
 fflush(stdout);avma=av0;free(sid);
}

void setcardgroup(x,n)
GROUP x;
long n;
{((long*)(x[0]))[1]=n;}

long getcardgroup(x)
GROUP x;
{long n;n=((long*)(x[0]))[1];return n;}

void desallocgroup(gr)
GROUP gr;
{
 long cardgr,i;
 cardgr=getcardgroup(gr);for(i=0;i<=cardgr;i++) free(gr[i]);free(gr);
}

GROUP allocgroup(n,cardgr)
long n,cardgr;
{
 long i;
 GROUP gr;
 gr=(char**)malloc(4*(cardgr+1));
 if(!((long)gr))
 {
  printf("\n\n***** not allocated memory in allocgroup() *****\n\n");
  fflush(stdout);exit(0);
 }
 gr[0]=(char*)malloc(8);
 if(!((long)gr[0]))
 {
  printf("\n\n***** not allocated memory in allocgroup() *****\n\n");
  fflush(stdout);exit(0);
 }
 gr[0][0]=n;setcardgroup(gr,cardgr);
 for(i=1;i<=cardgr;i++)
 {
  gr[i]=(char*)malloc(n+1);
  if(!((long)gr[i]))
  {
   printf("\n\n***** not allocated memory in allocgroup() *****\n\n");
   fflush(stdout);exit(0);
  }
  gr[i][0]=n;
 }
 return gr;
}

void desallocresolv(cr,nbcr)
RESOLVANTE cr;
long nbcr;
{
 long i;
 for(i=1;i<=nbcr;i++) free(cr[i]);free(cr);
}

RESOLVANTE allocresolv(nbcr,lgcr)
long nbcr,lgcr;
{
 long i;
 RESOLVANTE cr;
 cr=(char**)malloc(4*(nbcr+1));
 if(!((long)cr))
 {
  printf("\n\n***** not allocated memory in allocresolv() *****\n\n");
  fflush(stdout);exit(0);
 }
 for(i=1;i<=nbcr;i++)
 {
  cr[i]=(char*)malloc(lgcr+1);
  if(!((long)cr[i]))
  {
   printf("\n\n***** not allocated memory in allocresolv() *****\n\n");
   fflush(stdout);exit(0);
  }
 }
 return cr;
}

void permaff(s1,s2)
PERMUTATION s1,s2;
{
 long n,i;
 n=s1[0];if(n!=s2[0]) printf("\n***** incompatible lenght in permaff() *****\\n");
 else {for (i=0;i<=n;i++) s2[i]=s1[i];}
}

PERMUTATION permmul(s1,s2)
PERMUTATION s1,s2;
{
 long n1,n2,i;
 PERMUTATION s3;
 n1=s1[0];s3=(char*)malloc(n1+1);
 if(!((long)s3))
 {
  printf("\n\n***** not allocated memory in permmul() *****\n\n");
  fflush(stdout);exit(0);
 }
 s3[0]=n1;for (i=1;i<=n1;i++) s3[i]=s1[s2[i]];return s3;
}

void printperm(perm)
PERMUTATION perm;
{
 long n,i;
 n=perm[0];printf("(");for(i=1;i<=n;i++)printf(" %d",perm[i]);printf(" )");
}
    
void itoa(m,t)
long m;
char t[];
{
 long i,sign;
 if ((sign=m)<0) m=-m;i=0;do {t[i++]=m%10+'0';} while ((m/=10)>0);
 if (sign<0) t[i++]='-'; t[i]='\0';reverse(t);
}

void reverse(t)
char t[];
{
 long c,i,j;
 for (i=0,j=strlen(t)-1;i<j;i++,j--) {c=t[i];t[i]=t[j];t[j]=c;}
}
  
long compareupletlong(t1,t2,n) /* 0 si t1=t2, -1 si t1<t2, 1 si t1>t2 */
long *t1,*t2,n;
{
 long i;
 i=1;while((i<=n)&&(t1[i]==t2[i])) i++;
 if(i>n) return 0;else if(t1[i]<t2[i]) return -1;else return 1;
}

void ranger(t,n) /*ranger dans l'ordre decroissant*/
long *t,n;
{
 long tpro,ll,rr,i,j,flag;
 ll=1+n/2;rr=n;tpro=t[1];
 while((ll>1)||(rr>1))
 {
  if(ll>1){ll--;tpro=t[ll];}else{tpro=t[rr];t[rr]=t[1];rr--;}
  if(rr>1)
  {
   j=ll;flag=1;
   while(flag)
   {
    i=j;j<<=1;if(j>rr) flag=0;
    else {if(j<rr){if(t[j]>t[j+1]) j++;}if(t[j]>=tpro) flag=0;else t[i]=t[j];}
   }
   t[i]=tpro;
  }
 }
 t[1]=tpro;
}

long isin_G_H(po,r,n1,n2,pr)
GEN po,*r;
long n1,n2,pr;
{
 long nbv,nbm,nbgr,nbcoset,nbracint,nbracmul,lastnbri,lastnbrm;
 long nogr,nocoset,f0,f1,f2,f3,f4,i,j,k,d,nrm,nri,sp,cpr,nbdig;
 long numeri[2521],numerj[2521],lastnum[2521],multi[2521],norac[2521];
 long lastnor[2521],av1,av2,tetpil;
 PERMUTATION s0,uu,vv,ww;
 GROUP ss,tau;
 RESOLVANTE a;
 GEN gpol,gpolint,racint[2521],p1,rr;
  
 if(debug)
 {printf("\n*** Entering in isin_%ld_G_H_(%ld,%ld)\n",N,n1,n2);fflush(stdout);}
 f0=1;
 if(N==8)
 {s0=data8(n1,n2,&tau);if(((n1==47)&&(n2==46))||((n1==44)&&(n2==40))) f0=0;}
 else if(N==9)
 {
  s0=data9(n1,n2,&tau);
  if(((n1==31)&&(n2==29))||((n1==34)&&(n2==31))||((n1==33)&&(n2==30)))f0=0;
 }
 else if(N==10) 
 {
  s0=data10(n1,n2,&tau);
  if(((n1==45)&&(n2==43))||((n1==45)&&(n2==39))||((n1==44)&&(n2==42))
     ||((n1==44)&&(n2==37))||((n1==43)&&(n2==41))||((n1==43)&&(n2==33))
     ||((n1==42)&&(n2==28))||((n1==41)&&(n2==40))||((n1==41)&&(n2==27))
     ||((n1==41)&&(n2==22))||((n1==40)&&(n2==21))||((n1==40)&&(n2==11))
     ||((n1==39)&&(n2==38))||((n1==39)&&(n2==36))||((n1==39)&&(n2==29))
     ||((n1==39)&&(n2==22))||((n1==38)&&(n2==25))||((n1==38)&&(n2==12))
     ||((n1==37)&&(n2==34))||((n1==37)&&(n2==24))||((n1==36)&&(n2==23))
     ||((n1==36)&&(n2==11))||((n1==34)&&(n2==15))||((n1==33)&&(n2==27))
     ||((n1==29)&&(n2==25))||((n1==29)&&(n2==23))||((n1==29)&&(n2==5))
     ||((n1==28)&&(n2==18))||((n1==27)&&(n2==20))||((n1==27)&&(n2==19))
     ||((n1==27)&&(n2==17))||((n1==25)&&(n2==4))||((n1==24)&&(n2==15))
     ||((n1==23)&&(n2==16))||((n1==23)&&(n2==3))||((n1==22)&&(n2==12))
     ||((n1==22)&&(n2==11))||((n1==22)&&(n2==5))||((n1==21)&&(n2==10))
     ||((n1==21)&&(n2==9))||((n1==17)&&(n2==5))||((n1==16)&&(n2==2))
     ||((n1==14)&&(n2==1))||((n1==12)&&(n2==4))||((n1==11)&&(n2==3))
     ||((n1==10)&&(n2==4))||((n1==9)&&(n2==3))||((n1==6)&&(n2==1))
     ||((n1==5)&&(n2==3))) f0=0;
 }
 else s0=data11(n1,n2,&tau);
 nbgr=getcardgroup(tau);if(f0) a=lireresolv(n1,n2,N,&nbv,&nbm);
 ss=lirecoset(n1,n2,N);nbcoset=getcardgroup(ss);av1=avma;cpr=pr;
 for(nogr=1;nogr<=nbgr;nogr++)
 { 
  if(debug){printf("    ----> Group # %ld/%ld :\n",nogr,nbgr);fflush(stdout);}
  d=1;f2=0;f3=0;
  while(!f3)
  {
   rr=r[d-1];
   if(debug){if(d>1)
   {printf("          Working with polynomial #%ld :\n",d);fflush(stdout);}}
   if(!f2)
   {
    f2=1;
    do
    {
     f4=1;av2=avma;nbracmul=0;nbracint=0;
     for(nocoset=1;nocoset<=nbcoset;nocoset++)
     { 
      uu=permmul(tau[nogr],ss[nocoset]);
      if(f0) gpol=gpolynomial(rr,uu,a,nbm,nbv);else gpol=gpoly(rr,uu,n1,n2);
      free(uu);sp=suffprec(gpol);
      if(sp>0){f4=0;avma=av1;break;}
      p1=greal(gpol);gpolint=ground(p1);
      if((gcmp(gabs(gimag(gpol),pr),EPS)<0)&&(gcmp(gabs(gsub(p1,gpolint),pr),EPS)<0))
      {
       nbracmul++;
       if(nbracmul>2520)
       {
	printf("            there are more than 2520 rational integer roots\n");
	fflush(stdout);avma=av1;f2=0;break;
       }
       numerj[nbracmul]=nocoset;f1=1;
       for(j=1;j<=nbracint;j++)
	if(gegal(gpolint,racint[j])){multi[j]++;f1=0;norac[nbracmul]=j;break;}
       if(f1)
       {
	nbracint++;
	multi[nbracint]=1;numeri[nbracint]=nocoset;
	norac[nbracmul]=nbracint;tetpil=avma;
	racint[nbracint]=gerepile(av2,tetpil,gcopy(gpolint));
	av2=avma;
       }
       else avma=av2;
      }
      else avma=av2;
     }
     if(!f4)
     {
      cpr+=sp;
      if(debug)
      {printf("$$$$$ New precision = %ld\n",nbdig=(cpr-2)*9.63296);fflush(stdout);}
      if(cpr<=PRMAX) preci(r,cpr);
      else{moreprec(po,r,pr,cpr-PRMAX);preci(r,cpr);av1=avma;rr=r[d-1];}
     }
    }
    while(!f4);
    if(f2)
    {
     if(debug)
     {
      if(nbracint>1)
       printf("            there are %ld rational integer roots :\n",nbracint);
      else if(nbracint==1)
       printf("            there is 1 rational integer root :\n");
      else printf("            there is no rational integer root .\n");
      fflush(stdout);
      for(j=1;j<=nbracint;j++)
      {
       printf("               # %2ld : ",numeri[j]);sor(racint[j],'g',-1,0);
       printf(" , order %ld.\n",multi[j]);fflush(stdout);
      }
     }
     avma=av1;
     if(nbracint)
     {
      f1=1;
      for(i=1;i<=nbracint;i++)if(multi[i]==1){f1=0;uu=ss[numeri[i]];break;}
      if(!f1) f3=1;
      else
      {
       lastnbri=nbracint;lastnbrm=nbracmul;
       for(j=1;j<=nbracmul;j++){lastnum[j]=numerj[j];lastnor[j]=norac[j];}
      }
     }
     else f3=-1;
    }
   }
   else
   {
    nrm=0;nri=0;
    for(i=1;i<=lastnbri;i++)
    {
     do
     {
      f4=1;av2=avma;nbracmul=nrm;nbracint=nri;
      for(j=1;j<=lastnbrm;j++)
       if(lastnor[j]==i)
       {
	uu=permmul(tau[nogr],ss[lastnum[j]]);
	if(f0) gpol=gpolynomial(rr,uu,a,nbm,nbv);else gpol=gpoly(rr,uu,n1,n2);
	free(uu);sp=suffprec(gpol);
	if(sp>0){f4=0;avma=av1;break;}
	p1=greal(gpol);gpolint=ground(p1);
	if((gcmp(gabs(gimag(gpol),pr),EPS)<0)&&(gcmp(gabs(gsub(p1,gpolint),pr),EPS)<0))
	{
	 nbracmul++;numerj[nbracmul]=lastnum[j];f1=1;
	 for(k=nri+1;k<=nbracint;k++)
	  if(gegal(gpolint,racint[k])){multi[k]++;f1=0;norac[nbracmul]=k;break;}
	 if(f1)
	 {
	  nbracint++;multi[nbracint]=1;
	  numeri[nbracint]=lastnum[j];norac[nbracmul]=nbracint;
	  tetpil=avma;
	  racint[nbracint]=gerepile(av2,tetpil,gcopy(gpolint));
	  av2=avma;
	 }
	 else avma=av2;
	}
	else avma=av2;
       }
      if(!f4)
      {
       cpr+=sp;
       if(debug)
       {printf("$$$$$ New precision = %ld\n",nbdig=(cpr-2)*9.63296);fflush(stdout);}
       if(cpr<=PRMAX) preci(r,cpr);
       else{moreprec(po,r,pr,cpr-PRMAX);preci(r,cpr);av1=avma;rr=r[d-1];}
      }
     }
     while(!f4);
     if(debug)
     {
      if(nbracint>nri+1)
       printf("            there are %ld rational integer roots :\n",nbracint-nri);
      else if(nbracint==nri+1)
       printf("            there is 1 rational integer root :\n");
      else printf("            there is no rational integer root .\n");
      fflush(stdout);
      for(k=nri+1;k<=nbracint;k++)
      {
       printf("               number %2ld : ",numeri[k]);sor(racint[k],'g',-1,0);
       printf(" , order %ld.\n",multi[k]);fflush(stdout);
      }
     }
     avma=av1;
     if(nbracint>nri)
     {
      f1=1;
      for(k=nri+1;k<=nbracint;k++)if(multi[k]==1){f1=0;uu=ss[numeri[k]];break;}
      if(!f1){f3=1;break;}
     }
     nri=nbracint;nrm=nbracmul;
    }
    if(!f3) if(nbracint)
    {
     lastnbri=nbracint;lastnbrm=nbracmul;
     for(j=1;j<=nbracmul;j++){lastnum[j]=numerj[j];lastnor[j]=norac[j];}
    }
    else f3=-1;
   }
   avma=av1;
   if(!f3)
   {
    if(debug)
    {
     printf("            all rational integer roots are repeated roots .\n");
     fflush(stdout);
    }
    d++;if(d>TSCHMAX){tschirn(po,r,cpr);av1=avma;}
   }
  }
  if(f3==1)
  {
    vv=permmul(tau[nogr],uu);ww=permmul(vv,s0);
    if(debug)
    {
     printf("            testing roots reordering : ");fflush(stdout);
     if(f0) gpol=gpolynomial(rr,vv,a,nbm,nbv);else gpol=gpoly(rr,vv,n1,n2);
     sor(gpol,'g',-1,0);
     printf("\n    Output of isin_%ld_G_H(%ld,%ld) : %ld .\n",N,n1,n2,n2);  
     printf("    Reordering of the roots : ");printperm(ww);printf("\n");
     fflush(stdout);
    }
    avma=av1;rearrange(r,ww);free(vv);free(ww);break;
  }
 }
 free(s0);desallocgroup(ss);desallocgroup(tau);if(f0) desallocresolv(a,nbm);
 preci(r,pr);
 if(f3==1) return n2;
 if(debug)
 {
   printf("    Output of isin_%ld_G_H(%ld,%ld) : not included .\n",N,n1,n2);
   fflush(stdout);
 }
 return 0;
}


GROUP lirecoset(n1,n2,n)
long n1,n2,n;
{
 GROUP gr;
 long i,j,no,m,cardgr,fd;
 if((n<11)||(n1<8))
 {
  strcpy(chn,chaincoset);itoa(n,ch);strcat(chn,ch);strcat(chn,"_");
  itoa(n1,ch);strcat(chn,ch);strcat(chn,"_");itoa(n2,ch);strcat(chn,ch);
  fd=open(chn,0600);read(fd,&m,4);read(fd,&cardgr,4);gr=allocgroup(m,cardgr);
  for(i=1;i<=cardgr;i++) for(j=1;j<=m;j++) read(fd,&(gr[i][j]),1);close(fd);return gr;
 }
 else
 {
  gr=allocgroup(n,362880);
  for(no=1;no<9;no++)
  {
   strcpy(chn,chaincoset);itoa(n,ch);strcat(chn,ch);strcat(chn,"_");itoa(n1,ch);
   strcat(chn,ch);strcat(chn,"_");itoa(n2,ch);strcat(chn,ch);strcat(chn,"_");
   itoa(no,ch);strcat(chn,ch);fd=open(chn,0600);read(fd,&n,4);read(fd,&cardgr,4);
   m=cardgr*(no-1);for(i=1;i<=cardgr;i++) for(j=1;j<=N;j++) read(fd,&(gr[m+i][j]),1);
   close(fd);
  }
  return gr;
 }
}

RESOLVANTE lireresolv(n1,n2,n,nv,nm)
long n1,n2,n,*nv,*nm;
{
 RESOLVANTE b;
 long fd,i,j;
 strcpy(chn,chainresolv);itoa(n,ch);strcat(chn,ch);strcat(chn,"_");itoa(n1,ch);
 strcat(chn,ch);strcat(chn,"_");itoa(n2,ch);strcat(chn,ch);fd=open(chn,0600);
 read(fd,nm,4);read(fd,nv,4);b=allocresolv(*nm,*nv);
 for(i=1;i<=*nm;i++) for(j=1;j<=*nv;j++) read(fd,&(b[i][j]),1);close(fd);return b;
}

void tschirn(po,r,pr)
GEN po,*r;
long pr;
{
 long a[N],av0,v,i,j,d,tetpil;
 GEN h,u,x;
 d=TSCHMAX+1;
 if(d>=N)
 {
  printf("\n\n***** too large degree for Tschirnhausen transformation
          in tschirn() *****\n\n");
  fflush(stdout);exit(0);
 }
 if(debug)
 {
  printf("\n$$$$$ Tschirnhausen transformation of degree %ld : $$$$$\n",d);
  fflush(stdout);
 }
 av0=avma;v=varn(po);h=polun[v];
 do
 {
  avma=av0;
  for(i=0;i<d;i++){a[i]=((rand()>>4)&7)+1;h=gaddsg(a[i],gmul(polx[v],h));}
  u=caract(gmodulcp(h,po),v);
 }
 while(lgef(polgcd(u,deriv(u,v)))>=4);
 if(debug){bruteall(u,'g',-1,0);printf("\n\n");fflush(stdout);}
 avma=av0;preci(r,PRMAX);for(i=0;i<d;i++) coeff[d-1][i]=a[i];av0=avma;
 r[d-1]=cgetg(N+1,17);
 for(i=1;i<=N;i++)
 {x=gun;for(j=0;j<d;j++) x=gaddsg(a[j],gmul((GEN)((*r)[i]),x));r[d-1][i]=(long)x;}
 tetpil=avma;r[d-1]=gerepile(av0,tetpil,gcopy(r[d-1]));
 TSCHMAX++;preci(r,pr);
}

void preci(r,p)
GEN *r;
long p;
{
 GEN x;
 long d,i,j;
 if(p>PRMAX)
 {
  printf("\n\n***** too large precision in preci() *****\n\n");
  fflush(stdout);exit(0);
 }
 for(d=0;d<TSCHMAX;d++)
  for(i=1;i<=N;i++)
  {x=(GEN)(r[d][i]);if(typ(x)==6) for(j=1;j<3;j++) setlg((GEN)x[j],p);else setlg(x,p);}
}

long suffprec(z)
GEN z;
{
 long s,s1;
 if(typ(z)==6){s=suffprec((GEN)z[1]);s1=suffprec((GEN)z[2]);if(s1>s) s=s1;}
 else if(signe(z)==0) s=(expo(z)+101)>>5;else s=((expo(z)+165)>>5)-lg(z);
 return s;
}

void moreprec(po,r,pr,sp)
GEN po,*r;
long pr,sp;
{
 long i,j,k,av0,tetpil;
 GEN rrpro,x;
 if(sp<5) sp=5;
 PRMAX+=sp;rrpro=roots(po,PRMAX);
 if((lg(rrpro)-1)!=N)
 {
  printf("\n\n***** incompatible number of roots in moreprec() *****\n\n");
  fflush(stdout);exit(0);
 }
 rangeroots(rrpro,*r,pr);*r=rrpro;
 for(i=1;i<TSCHMAX;i++)
 {
  av0=avma;
  for(j=1;j<=N;j++)
  {x=gun;for(k=0;k<=i;k++) x=gaddsg(coeff[i][k],gmul((GEN)((*r)[j]),x));r[i][j]=(long)x;}
  tetpil=avma;r[i]=gerepile(av0,tetpil,gcopy(r[i]));
 }
 preci(r,pr);
}

void rangeroots(newrr,oldrr,pr)
GEN newrr,oldrr;
long pr;
{
 long av0,i,j,k,z[N+1];
 char s[N+1],t[N+1];
 GEN diff,diff0;
 av0=avma;for(i=1;i<=N;i++) t[i]=1;
 for(i=1;i<=N;i++)
 {
  j=1;diff0=gun;
  while(j<=N)
  {
   if(t[j])
   {
     diff=gabs(gsub((GEN)(oldrr[i]),(GEN)(newrr[j])),pr);
     if(gcmp(diff,diff0)<0) { diff0=diff;k=j; }
   }
   j++;
  }
  s[i]=k;t[k]=0;
 }
 avma=av0;for(i=1;i<=N;i++) z[i]=newrr[s[i]];
 for(i=1;i<=N;i++) newrr[i]=z[i];
}

void rearrange(r,s)
GEN *r;
PERMUTATION s;
{
 long z[N+1],i,j;
 for(i=0;i<TSCHMAX;i++)
 {for(j=1;j<=N;j++) z[j]=r[i][s[j]];for(j=1;j<=N;j++) r[i][j]=z[j];}
}

GEN monomial(rr,tt,bb,nbv)
GEN rr;
PERMUTATION tt,bb;
long nbv;
{
 long i,av,tetpil;
 GEN p1;
 av=avma;p1=(GEN)(rr[tt[bb[1]]]);
 for(i=2;i<nbv;i++) p1=gmul(p1,(GEN)(rr[tt[bb[i]]]));
 tetpil=avma;return gerepile(av,tetpil,gmul(p1,(GEN)(rr[tt[bb[nbv]]])));
}

GEN gpolynomial(rr,tt,aa,nbm,nbv)
GEN rr;
PERMUTATION tt;
RESOLVANTE aa;
long nbm,nbv;
{
 long i,av,tetpil;
 GEN p1,p2,p3;
 av=avma;p1=monomial(rr,tt,aa[1],nbv);
 for(i=2;i<nbm;i++){p2=monomial(rr,tt,aa[i],nbv);p1=gadd(p1,p2);}
 tetpil=avma;return gerepile(av,tetpil,gadd(p1,monomial(rr,tt,aa[nbm],nbv)));
}

GEN gpoly(rr,tt,n1,n2)
GEN rr;
PERMUTATION tt;
long n1,n2;
{
 long av,tetpil,i,j;
 GEN p1,p2,p3,p4,z[6];
 av=avma;
 if(N==8)
 {
  if((n1==47)&&(n2==46))
  {
    p1=gsub((GEN)rr[tt[3]],(GEN)rr[tt[4]]);
    for(i=1;i<3;i++) for(j=i+1;j<5;j++) p1=gmul(p1,gsub((GEN)rr[tt[i]],(GEN)rr[tt[j]]));
    for(i=5;i<8;i++) for(j=i+1;j<9;j++)p1=gmul(p1,gsub((GEN)rr[tt[i]],(GEN)rr[tt[j]]));
    p2=(GEN)rr[tt[1]];for(i=2;i<5;i++) p2=gadd(p2,(GEN)rr[tt[i]]);
    for(i=5;i<9;i++) p2=gsub(p2,(GEN)rr[tt[i]]);
    tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if((n1==44)&&(n2==40))
  {
   p1=gsub((GEN)rr[tt[1]],(GEN)rr[tt[2]]);
   for(i=2;i<5;i++) p1=gmul(p1,gsub((GEN)rr[tt[2*i-1]],(GEN)rr[tt[2*i]]));
   for(i=1;i<5;i++) z[i]=gadd((GEN)rr[tt[2*i-1]],(GEN)rr[tt[2*i]]);
   p2=gsub(z[3],z[4]);for(i=1;i<3;i++) for(j=i+1;j<5;j++) p2=gmul(p2,gsub(z[i],z[j]));
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
 }
 else if(N==9)
 {
  if((n1==31)&&(n2==29))
  {
   p1=gsub((GEN)rr[tt[2]],(GEN)rr[tt[3]]);
   for(j=2;j<4;j++) p1=gmul(p1,gsub((GEN)rr[tt[1]],(GEN)rr[tt[j]]));
   for(i=4;i<6;i++) for(j=i+1;j<7;j++) p1=gmul(p1,gsub((GEN)rr[tt[i]],(GEN)rr[tt[j]]));
   p2=gsub((GEN)rr[tt[8]],(GEN)rr[tt[9]]);
   for(j=8;j<10;j++) p2=gmul(p2,gsub((GEN)rr[tt[7]],(GEN)rr[tt[j]]));
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if(((n1==34)&&(n2==31))||((n1=33)&&(n2==30)))
  {
   p1=(GEN)rr[tt[1]];for(i=2;i<4;i++) p1=gadd(p1,(GEN)rr[tt[i]]);
   p2=(GEN)rr[tt[4]];for(i=5;i<7;i++) p2=gadd(p2,(GEN)rr[tt[i]]);
   p1=gmul(p1,p2);p2=(GEN)rr[tt[7]];for(i=8;i<10;i++) p2=gadd(p2,(GEN)rr[tt[i]]);
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
 }
 else if(N==10)
 { 
  if(((n1==45)&&(n2==43))||((n1==44)&&(n2==42)))
  {
   p1=(GEN)rr[tt[1]];for(i=2;i<6;i++) p1=gadd(p1,(GEN)rr[tt[i]]);
   p2=(GEN)rr[tt[6]];for(i=7;i<11;i++) p2=gadd(p2,(GEN)rr[tt[i]]);
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if(((n1==45)&&(n2==39))||((n1==44)&&(n2==37)))
  {
   p1=gadd((GEN)rr[tt[1]],(GEN)rr[tt[2]]);
   for(i=2;i<5;i++) p1=gmul(p1,gadd((GEN)rr[tt[2*i-1]],(GEN)rr[tt[2*i]]));
   p2=gadd((GEN)rr[tt[9]],(GEN)rr[tt[10]]);
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if(((n1==43)&&(n2==41))||((n1==33)&&(n2==27)))
  {
   p1=gsub((GEN)rr[tt[4]],(GEN)rr[tt[5]]);
   for(i=1;i<4;i++)
    for(j=i+1;j<6;j++) p1=gmul(p1,gsub((GEN)rr[tt[i]],(GEN)rr[tt[j]]));
   p2=gsub((GEN)rr[tt[9]],(GEN)rr[tt[10]]);
   for(i=6;i<9;i++)
    for(j=i+1;j<11;j++) p2=gmul(p2,gsub((GEN)rr[tt[i]],(GEN)rr[tt[j]]));
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if(((n1==43)&&(n2==33))||((n1==42)&&(n2==28))||((n1==41)&&(n2==27))
	  ||((n1==40)&&(n2==21)))
  {
   p2=gadd((GEN)rr[tt[2]],(GEN)rr[tt[5]]);
   p2=gsub(p2,gadd((GEN)rr[tt[3]],(GEN)rr[tt[4]]));p1=gmul(p2,(GEN)rr[tt[1]]);
   p2=gsub((GEN)rr[tt[3]],gadd((GEN)rr[tt[4]],(GEN)rr[tt[5]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[2]]));p2=gsub((GEN)rr[tt[4]],(GEN)rr[tt[5]]);
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[3]]));p1=gadd(p1,gmul((GEN)rr[tt[4]],(GEN)rr[tt[5]]));
   p1=gmul(p1,p1);p4=gadd((GEN)rr[tt[7]],(GEN)rr[tt[10]]);
   p4=gsub(p4,gadd((GEN)rr[tt[8]],(GEN)rr[tt[9]]));p3=gmul(p4,(GEN)rr[tt[6]]);
   p4=gsub((GEN)rr[tt[8]],gadd((GEN)rr[tt[9]],(GEN)rr[tt[10]]));
   p3=gadd(p3,gmul(p4,(GEN)rr[tt[7]]));p4=gsub((GEN)rr[tt[9]],(GEN)rr[tt[10]]);
   p3=gadd(p3,gmul(p4,(GEN)rr[tt[8]]));p3=gadd(p3,gmul((GEN)rr[tt[9]],(GEN)rr[tt[10]]));
   p3=gmul(p3,p3);tetpil=avma;return gerepile(av,tetpil,gadd(p1,p3));
  }
  else if((n1==41)&&(n2==40))
  {
   p1=gsub((GEN)rr[tt[4]],(GEN)rr[tt[5]]);
   for(i=1;i<4;i++) for(j=i+1;j<6;j++) p1=gmul(p1,gsub((GEN)rr[tt[i]],(GEN)rr[tt[j]]));
   p2=gsub((GEN)rr[tt[9]],(GEN)rr[tt[10]]);
   for(i=6;i<9;i++) for(j=i+1;j<11;j++) p2=gmul(p2,gsub((GEN)rr[tt[i]],(GEN)rr[tt[j]]));
   tetpil=avma;return gerepile(av,tetpil,gadd(p1,p2));
  }
  else if(((n1==41)&&(n2==22))||((n1==40)&&(n2==11))||((n1==17)&&(n2==5))
	  ||((n1==10)&&(n2==4))||((n1==9)&&(n2==3))||((n1==6)&&(n2==1)))
  {
   p1=gadd((GEN)rr[tt[1]],(GEN)rr[tt[6]]);
   for(i=2;i<5;i++) p1=gmul(p1,gadd((GEN)rr[tt[i]],(GEN)rr[tt[i+5]]));
   p2=gadd((GEN)rr[tt[5]],(GEN)rr[tt[10]]);
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if(((n1==39)&&(n2==38))||((n1==29)&&(n2==25)))
  {
   p1=gsub((GEN)rr[tt[1]],(GEN)rr[tt[2]]);
   for(i=2;i<6;i++) p1=gmul(p1,gsub((GEN)rr[tt[2*i-1]],(GEN)rr[tt[2*i]]));
   for(i=1;i<6;i++) z[i]=gadd((GEN)rr[tt[2*i-1]],(GEN)rr[tt[2*i]]);
   p2=gsub(z[4],z[5]);for(i=1;i<4;i++) for(j=i+1;j<6;j++) p2=gmul(p2,gsub(z[i],z[j]));
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if(((n1==39)&&(n2==36))||((n1==37)&&(n2==34))||((n1==29)&&(n2==23))
	  ||((n1==24)&&(n2==15)))
  {
   for(i=1;i<6;i++) z[i]=gadd((GEN)rr[tt[2*i-1]],(GEN)rr[tt[2*i]]);	  
   p1=gsub(z[4],z[5]);p2=gmul(gsub(z[3],z[4]),gsub(z[3],z[5]));
   for(i=1;i<3;i++) for(j=i+1;j<6;j++) p2=gmul(p2,gsub(z[i],z[j]));	  
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if(((n1==39)&&(n2==29))||((n1==38)&&(n2==25))||((n1==37)&&(n2==24))
	  ||((n1==36)&&(n2==23))||((n1==34)&&(n2==15)))
  {
   for(i=1;i<6;i++) z[i]=gadd((GEN)rr[tt[2*i-1]],(GEN)rr[tt[2*i]]);
   p2=gadd(z[2],z[5]);p2=gsub(p2,gadd(z[3],z[4]));p1=gmul(p2,z[1]);
   p2=gsub(z[3],gadd(z[4],z[5]));p1=gadd(p1,gmul(p2,z[2]));p2=gsub(z[4],z[5]);
   p1=gadd(p1,gmul(p2,z[3]));p1=gadd(p1,gmul(z[4],z[5]));
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p1));
  }
  else if(((n1==39)&&(n2==22))||((n1==38)&&(n2==12))||((n1==36)&&(n2==11))
	  ||((n1==29)&&(n2==5))||((n1==25)&&(n2==4))||((n1==23)&&(n2==3))
	  ||((n1==16)&&(n2==2))||((n1==14)&&(n2==1)))
  {
   p1=(GEN)rr[tt[1]];for(i=2;i<6;i++) p1=gadd(p1,(GEN)rr[tt[2*i-1]]);
   p2=(GEN)rr[tt[2]];for(i=2;i<6;i++) p2=gadd(p2,(GEN)rr[tt[2*i]]);
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));	  
  }
  else if((n1==28)&&(n2==18))
  {
   p2=gsub((GEN)rr[tt[1]],gadd((GEN)rr[tt[2]],(GEN)rr[tt[5]]));
   p2=gmul(p2,gsub((GEN)rr[tt[2]],(GEN)rr[tt[5]]));p1=gmul(p2,(GEN)rr[tt[1]]);
   p2=gsub((GEN)rr[tt[3]],gadd((GEN)rr[tt[2]],(GEN)rr[tt[4]]));
   p2=gmul(p2,gsub((GEN)rr[tt[4]],(GEN)rr[tt[2]]));p1=gadd(p1,gmul(p2,(GEN)rr[tt[3]]));
   p2=gmul((GEN)rr[tt[5]],gsub((GEN)rr[tt[4]],(GEN)rr[tt[5]]));
   z[1]=gadd(p1,gmul(p2,(GEN)rr[tt[4]]));
   p2=gsub((GEN)rr[tt[1]],gadd((GEN)rr[tt[3]],(GEN)rr[tt[4]]));
   p2=gmul(p2,gsub((GEN)rr[tt[3]],(GEN)rr[tt[4]]));
   p1=gmul(p2,(GEN)rr[tt[1]]);
   p2=gsub((GEN)rr[tt[5]],gadd((GEN)rr[tt[3]],(GEN)rr[tt[2]]));
   p2=gmul(p2,gsub((GEN)rr[tt[2]],(GEN)rr[tt[3]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[5]]));
   p2=gmul((GEN)rr[tt[4]],gsub((GEN)rr[tt[2]],(GEN)rr[tt[4]]));
   z[2]=gadd(p1,gmul(p2,(GEN)rr[tt[2]]));
   p2=gsub((GEN)rr[tt[6]],gadd((GEN)rr[tt[7]],(GEN)rr[tt[10]]));
   p2=gmul(p2,gsub((GEN)rr[tt[7]],(GEN)rr[tt[10]]));
   p1=gmul(p2,(GEN)rr[tt[6]]);
   p2=gsub((GEN)rr[tt[8]],gadd((GEN)rr[tt[7]],(GEN)rr[tt[9]]));
   p2=gmul(p2,gsub((GEN)rr[tt[9]],(GEN)rr[tt[7]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[8]]));
   p2=gmul((GEN)rr[tt[10]],gsub((GEN)rr[tt[9]],(GEN)rr[tt[10]]));
   z[3]=gadd(p1,gmul(p2,(GEN)rr[tt[9]]));
   p2=gsub((GEN)rr[tt[6]],gadd((GEN)rr[tt[8]],(GEN)rr[tt[9]]));
   p2=gmul(p2,gsub((GEN)rr[tt[8]],(GEN)rr[tt[9]]));
   p1=gmul(p2,(GEN)rr[tt[6]]);
   p2=gsub((GEN)rr[tt[10]],gadd((GEN)rr[tt[8]],(GEN)rr[tt[7]]));
   p2=gmul(p2,gsub((GEN)rr[tt[7]],(GEN)rr[tt[8]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[10]]));
   p2=gmul((GEN)rr[tt[9]],gsub((GEN)rr[tt[7]],(GEN)rr[tt[9]]));
   z[4]=gadd(p1,gmul(p2,(GEN)rr[tt[7]]));
   p1=gmul(z[1],gsub(z[3],z[4]));
   p2=gmul(z[2],gadd(z[3],z[4]));
   tetpil=avma;return gerepile(av,tetpil,gadd(p1,p2));
  }
  else if((n1==27)&&(n2==20))
  {
   p2=gsub((GEN)rr[tt[1]],gadd((GEN)rr[tt[2]],(GEN)rr[tt[5]]));
   p2=gmul(p2,gsub((GEN)rr[tt[2]],(GEN)rr[tt[5]]));
   p1=gmul(p2,(GEN)rr[tt[1]]);
   p2=gsub((GEN)rr[tt[3]],gadd((GEN)rr[tt[2]],(GEN)rr[tt[4]]));
   p2=gmul(p2,gsub((GEN)rr[tt[4]],(GEN)rr[tt[2]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[3]]));
   p2=gmul((GEN)rr[tt[5]],gsub((GEN)rr[tt[4]],(GEN)rr[tt[5]]));
   z[1]=gadd(p1,gmul(p2,(GEN)rr[tt[4]]));
   p2=gsub((GEN)rr[tt[1]],gadd((GEN)rr[tt[3]],(GEN)rr[tt[4]]));
   p2=gmul(p2,gsub((GEN)rr[tt[3]],(GEN)rr[tt[4]]));
   p1=gmul(p2,(GEN)rr[tt[1]]);
   p2=gsub((GEN)rr[tt[5]],gadd((GEN)rr[tt[3]],(GEN)rr[tt[2]]));
   p2=gmul(p2,gsub((GEN)rr[tt[2]],(GEN)rr[tt[3]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[5]]));
   p2=gmul((GEN)rr[tt[4]],gsub((GEN)rr[tt[2]],(GEN)rr[tt[4]]));
   z[2]=gadd(p1,gmul(p2,(GEN)rr[tt[2]]));
   p2=gsub((GEN)rr[tt[6]],gadd((GEN)rr[tt[7]],(GEN)rr[tt[10]]));
   p2=gmul(p2,gsub((GEN)rr[tt[7]],(GEN)rr[tt[10]]));
   p1=gmul(p2,(GEN)rr[tt[6]]);
   p2=gsub((GEN)rr[tt[8]],gadd((GEN)rr[tt[7]],(GEN)rr[tt[9]]));
   p2=gmul(p2,gsub((GEN)rr[tt[9]],(GEN)rr[tt[7]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[8]]));
   p2=gmul((GEN)rr[tt[10]],gsub((GEN)rr[tt[9]],(GEN)rr[tt[10]]));
   z[3]=gadd(p1,gmul(p2,(GEN)rr[tt[9]]));
   p2=gsub((GEN)rr[tt[6]],gadd((GEN)rr[tt[8]],(GEN)rr[tt[9]]));
   p2=gmul(p2,gsub((GEN)rr[tt[8]],(GEN)rr[tt[9]]));
   p1=gmul(p2,(GEN)rr[tt[6]]);
   p2=gsub((GEN)rr[tt[10]],gadd((GEN)rr[tt[8]],(GEN)rr[tt[7]]));
   p2=gmul(p2,gsub((GEN)rr[tt[7]],(GEN)rr[tt[8]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[10]]));
   p2=gmul((GEN)rr[tt[9]],gsub((GEN)rr[tt[7]],(GEN)rr[tt[9]]));
   z[4]=gadd(p1,gmul(p2,(GEN)rr[tt[7]]));
   p1=gsub(gmul(z[1],z[3]),gmul(z[2],z[4]));
   p2=(GEN)rr[tt[1]];for(i=2;i<6;i++)p2=gadd(p2,(GEN)rr[tt[i]]);
   for(i=6;i<11;i++) p2=gsub(p2,(GEN)rr[tt[i]]);
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if((n1==27)&&(n2==19))
  {
   p2=gsub((GEN)rr[tt[1]],gadd((GEN)rr[tt[2]],(GEN)rr[tt[5]]));
   p2=gmul(p2,gsub((GEN)rr[tt[2]],(GEN)rr[tt[5]]));
   p1=gmul(p2,(GEN)rr[tt[1]]);
   p2=gsub((GEN)rr[tt[3]],gadd((GEN)rr[tt[2]],(GEN)rr[tt[4]]));
   p2=gmul(p2,gsub((GEN)rr[tt[4]],(GEN)rr[tt[2]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[3]]));
   p2=gmul((GEN)rr[tt[5]],gsub((GEN)rr[tt[4]],(GEN)rr[tt[5]]));
   z[1]=gadd(p1,gmul(p2,(GEN)rr[tt[4]]));
   p2=gsub((GEN)rr[tt[1]],gadd((GEN)rr[tt[3]],(GEN)rr[tt[4]]));
   p2=gmul(p2,gsub((GEN)rr[tt[3]],(GEN)rr[tt[4]]));
   p1=gmul(p2,(GEN)rr[tt[1]]);
   p2=gsub((GEN)rr[tt[5]],gadd((GEN)rr[tt[3]],(GEN)rr[tt[2]]));
   p2=gmul(p2,gsub((GEN)rr[tt[2]],(GEN)rr[tt[3]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[5]]));
   p2=gmul((GEN)rr[tt[4]],gsub((GEN)rr[tt[2]],(GEN)rr[tt[4]]));
   z[2]=gadd(p1,gmul(p2,(GEN)rr[tt[2]]));
   p2=gsub((GEN)rr[tt[6]],gadd((GEN)rr[tt[7]],(GEN)rr[tt[10]]));
   p2=gmul(p2,gsub((GEN)rr[tt[7]],(GEN)rr[tt[10]]));
   p1=gmul(p2,(GEN)rr[tt[6]]);
   p2=gsub((GEN)rr[tt[8]],gadd((GEN)rr[tt[7]],(GEN)rr[tt[9]]));
   p2=gmul(p2,gsub((GEN)rr[tt[9]],(GEN)rr[tt[7]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[8]]));
   p2=gmul((GEN)rr[tt[10]],gsub((GEN)rr[tt[9]],(GEN)rr[tt[10]]));
   z[3]=gadd(p1,gmul(p2,(GEN)rr[tt[9]]));
   p2=gsub((GEN)rr[tt[6]],gadd((GEN)rr[tt[8]],(GEN)rr[tt[9]]));
   p2=gmul(p2,gsub((GEN)rr[tt[8]],(GEN)rr[tt[9]]));
   p1=gmul(p2,(GEN)rr[tt[6]]);
   p2=gsub((GEN)rr[tt[10]],gadd((GEN)rr[tt[8]],(GEN)rr[tt[7]]));
   p2=gmul(p2,gsub((GEN)rr[tt[7]],(GEN)rr[tt[8]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[10]]));
   p2=gmul((GEN)rr[tt[9]],gsub((GEN)rr[tt[7]],(GEN)rr[tt[9]]));
   z[4]=gadd(p1,gmul(p2,(GEN)rr[tt[7]]));
   p1=gmul(z[1],z[3]);p2=gmul(z[2],z[4]);
   tetpil=avma;return gerepile(av,tetpil,gsub(p1,p2));
  }
  else if(((n1==27)&&(n2==17))||((n1==21)&&(n2==9)))
  {
   p2=gsub((GEN)rr[tt[1]],gadd((GEN)rr[tt[2]],(GEN)rr[tt[5]]));
   p2=gmul(p2,gsub((GEN)rr[tt[2]],(GEN)rr[tt[5]]));
   p1=gmul(p2,(GEN)rr[tt[1]]);
   p2=gsub((GEN)rr[tt[3]],gadd((GEN)rr[tt[2]],(GEN)rr[tt[4]]));
   p2=gmul(p2,gsub((GEN)rr[tt[4]],(GEN)rr[tt[2]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[3]]));
   p2=gmul((GEN)rr[tt[5]],gsub((GEN)rr[tt[4]],(GEN)rr[tt[5]]));
   z[1]=gadd(p1,gmul(p2,(GEN)rr[tt[4]]));
   p2=gsub((GEN)rr[tt[1]],gadd((GEN)rr[tt[3]],(GEN)rr[tt[4]]));
   p2=gmul(p2,gsub((GEN)rr[tt[3]],(GEN)rr[tt[4]]));
   p1=gmul(p2,(GEN)rr[tt[1]]);
   p2=gsub((GEN)rr[tt[5]],gadd((GEN)rr[tt[3]],(GEN)rr[tt[2]]));
   p2=gmul(p2,gsub((GEN)rr[tt[2]],(GEN)rr[tt[3]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[5]]));
   p2=gmul((GEN)rr[tt[4]],gsub((GEN)rr[tt[2]],(GEN)rr[tt[4]]));
   z[2]=gadd(p1,gmul(p2,(GEN)rr[tt[2]]));
   p2=gsub((GEN)rr[tt[6]],gadd((GEN)rr[tt[7]],(GEN)rr[tt[10]]));
   p2=gmul(p2,gsub((GEN)rr[tt[7]],(GEN)rr[tt[10]]));
   p1=gmul(p2,(GEN)rr[tt[6]]);
   p2=gsub((GEN)rr[tt[8]],gadd((GEN)rr[tt[7]],(GEN)rr[tt[9]]));
   p2=gmul(p2,gsub((GEN)rr[tt[9]],(GEN)rr[tt[7]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[8]]));
   p2=gmul((GEN)rr[tt[10]],gsub((GEN)rr[tt[9]],(GEN)rr[tt[10]]));
   z[3]=gadd(p1,gmul(p2,(GEN)rr[tt[9]]));
   p2=gsub((GEN)rr[tt[6]],gadd((GEN)rr[tt[8]],(GEN)rr[tt[9]]));
   p2=gmul(p2,gsub((GEN)rr[tt[8]],(GEN)rr[tt[9]]));
   p1=gmul(p2,(GEN)rr[tt[6]]);
   p2=gsub((GEN)rr[tt[10]],gadd((GEN)rr[tt[8]],(GEN)rr[tt[7]]));
   p2=gmul(p2,gsub((GEN)rr[tt[7]],(GEN)rr[tt[8]]));
   p1=gadd(p1,gmul(p2,(GEN)rr[tt[10]]));
   p2=gmul((GEN)rr[tt[9]],gsub((GEN)rr[tt[7]],(GEN)rr[tt[9]]));
   z[4]=gadd(p1,gmul(p2,(GEN)rr[tt[7]]));
   p1=gmul(z[1],z[3]);p2=gmul(z[2],z[4]);
   tetpil=avma;return gerepile(av,tetpil,gadd(p1,p2));
  }
  else if((n1==23)&&(n2==16))
  {
   p1=gsub((GEN)rr[tt[1]],(GEN)rr[tt[2]]);
   for(i=2;i<6;i++) p1=gmul(p1,gsub((GEN)rr[tt[2*i-1]],(GEN)rr[tt[2*i]]));
   for(i=1;i<6;i++) z[i]=gadd((GEN)rr[tt[2*i-1]],(GEN)rr[tt[2*i]]);
   p3=gsub(z[1],gadd(z[2],z[5]));p3=gmul(p3,gsub(z[2],z[5]));
   p2=gmul(p3,z[1]);p3=gsub(z[3],gadd(z[2],z[4]));
   p3=gmul(p3,gsub(z[4],z[2]));p2=gadd(p2,gmul(p3,z[3]));
   p3=gmul(z[5],gsub(z[4],z[5]));p2=gadd(p2,gmul(p3,z[4]));
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if((n1==22)&&(n2==12))
  {
   p1=gsub((GEN)rr[tt[1]],(GEN)rr[tt[6]]);
   for(i=2;i<6;i++) p1=gmul(p1,gsub((GEN)rr[tt[i]],(GEN)rr[tt[i+5]]));
   for(i=1;i<6;i++) z[i]=gadd((GEN)rr[tt[i]],(GEN)rr[tt[i+5]]);
   p2=gsub(z[4],z[5]);
   for(i=1;i<4;i++) for(j=i+1;j<6;j++) p2=gmul(p2,gsub(z[i],z[j]));
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if(((n1==22)&&(n2==11))||((n1==5)&&(n2==3)))
  {
   for(i=1;i<6;i++) z[i]=gadd((GEN)rr[tt[i]],(GEN)rr[tt[i+5]]);	  
   p1=gsub(z[4],z[5]);p2=gmul(gsub(z[3],z[4]),gsub(z[3],z[5]));
   for(i=1;i<3;i++) for(j=i+1;j<6;j++) p2=gmul(p2,gsub(z[i],z[j]));	  
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p2));
  }
  else if(((n1==22)&&(n2==5))||((n1==12)&&(n2==4))||((n1==11)&&(n2==3)))
  {
   for(i=1;i<6;i++) z[i]=gadd((GEN)rr[tt[i]],(GEN)rr[tt[i+5]]);
   p2=gadd(z[2],z[5]);p2=gsub(p2,gadd(z[3],z[4]));p1=gmul(p2,z[1]);
   p2=gsub(z[3],gadd(z[4],z[5]));p1=gadd(p1,gmul(p2,z[2]));p2=gsub(z[4],z[5]);
   p1=gadd(p1,gmul(p2,z[3]));p1=gadd(p1,gmul(z[4],z[5]));
   tetpil=avma;return gerepile(av,tetpil,gmul(p1,p1));
  }
  else if((n1==21)&&(n2==10))
  {
    p2=gsub((GEN)rr[tt[1]],gadd((GEN)rr[tt[2]],(GEN)rr[tt[5]]));
    p2=gmul(p2,gsub((GEN)rr[tt[2]],(GEN)rr[tt[5]]));
    p1=gmul(p2,(GEN)rr[tt[1]]);
    p2=gsub((GEN)rr[tt[3]],gadd((GEN)rr[tt[2]],(GEN)rr[tt[4]]));
    p2=gmul(p2,gsub((GEN)rr[tt[4]],(GEN)rr[tt[2]]));
    p1=gadd(p1,gmul(p2,(GEN)rr[tt[3]]));
    p2=gmul((GEN)rr[tt[5]],gsub((GEN)rr[tt[4]],(GEN)rr[tt[5]]));
    z[1]=gadd(p1,gmul(p2,(GEN)rr[tt[4]]));
    p2=gsub((GEN)rr[tt[1]],gadd((GEN)rr[tt[3]],(GEN)rr[tt[4]]));
    p2=gmul(p2,gsub((GEN)rr[tt[3]],(GEN)rr[tt[4]]));
    p1=gmul(p2,(GEN)rr[tt[1]]);
    p2=gsub((GEN)rr[tt[5]],gadd((GEN)rr[tt[3]],(GEN)rr[tt[2]]));
    p2=gmul(p2,gsub((GEN)rr[tt[2]],(GEN)rr[tt[3]]));
    p1=gadd(p1,gmul(p2,(GEN)rr[tt[5]]));
    p2=gmul((GEN)rr[tt[4]],gsub((GEN)rr[tt[2]],(GEN)rr[tt[4]]));
    z[2]=gadd(p1,gmul(p2,(GEN)rr[tt[2]]));
    p2=gsub((GEN)rr[tt[6]],gadd((GEN)rr[tt[7]],(GEN)rr[tt[10]]));
    p2=gmul(p2,gsub((GEN)rr[tt[7]],(GEN)rr[tt[10]]));
    p1=gmul(p2,(GEN)rr[tt[6]]);
    p2=gsub((GEN)rr[tt[8]],gadd((GEN)rr[tt[7]],(GEN)rr[tt[9]]));
    p2=gmul(p2,gsub((GEN)rr[tt[9]],(GEN)rr[tt[7]]));
    p1=gadd(p1,gmul(p2,(GEN)rr[tt[8]]));
    p2=gmul((GEN)rr[tt[10]],gsub((GEN)rr[tt[9]],(GEN)rr[tt[10]]));
    z[3]=gadd(p1,gmul(p2,(GEN)rr[tt[9]]));
    p2=gsub((GEN)rr[tt[6]],gadd((GEN)rr[tt[8]],(GEN)rr[tt[9]]));
    p2=gmul(p2,gsub((GEN)rr[tt[8]],(GEN)rr[tt[9]]));
    p1=gmul(p2,(GEN)rr[tt[6]]);
    p2=gsub((GEN)rr[tt[10]],gadd((GEN)rr[tt[8]],(GEN)rr[tt[7]]));
    p2=gmul(p2,gsub((GEN)rr[tt[7]],(GEN)rr[tt[8]]));
    p1=gadd(p1,gmul(p2,(GEN)rr[tt[10]]));
    p2=gmul((GEN)rr[tt[9]],gsub((GEN)rr[tt[7]],(GEN)rr[tt[9]]));
    z[4]=gadd(p1,gmul(p2,(GEN)rr[tt[7]]));
    p1=gmul(z[1],z[4]);p2=gmul(z[2],z[3]);
    tetpil=avma;
    return gerepile(av,tetpil,gsub(p1,p2));
  }
 }
 printf("\n\n***** indefinite invariant polynomial in gpoly() *****\n\n");
 fflush(stdout);exit(0);
}

void heure()
{
 struct rusage r;
 struct timeval t;
 getrusage(0,&r);t=r.ru_utime;tssun=1000.*t.tv_sec+(t.tv_usec/1000.);
}

long duree()
{
 struct rusage r;
 struct timeval t;
 getrusage(0,&r);t=r.ru_utime;return((1000.*t.tv_sec+(t.tv_usec/1000.)-tssun)/1000);
}


/* BIBLIOTHEQUE POUR LE DEGRE 8 */

long closure8(po,ca,pr)
GEN po;
long ca,pr;
{
 long nbrac,rep1,rep2,rep;
 GEN *r;
 
 PRMAX=pr+5;TSCHMAX=1;
 r=(GEN*)malloc(4*N-4);
 *r=roots(po,PRMAX);nbrac=lg(*r)-1;
 if(nbrac!=N)
 {  
  printf("\n\n***** incompatible number of roots in closure8() *****\n\n");
  fflush(stdout);exit(0);
 }
 preci(r,pr);
 if(!ca)
 {
 CLOS_8_1:
  rep1=isin_G_H(po,r,50,47,pr);
  if(!rep1)
   {
   CLOS_8_2:
    rep2=isin_G_H(po,r,50,44,pr);
    if(!rep2) rep= galoisprim8(po,r,ca,pr);
    else rep=galoisimpodd8(po,r,pr,44);
   }
  else rep=galoisimpodd8(po,r,pr,47);
 }
 else
 {
 CLOS_8_3:
  rep1=isin_G_H(po,r,49,45,pr);
  if(!rep1)
    {
   CLOS_8_4:
    rep2=isin_G_H(po,r,49,39,pr);
    if(!rep2) rep=galoisprim8(po,r,ca,pr);
    else rep=galoisimpeven8(po,r,pr,39);
    }
  else rep=galoisimpeven8(po,r,pr,45);
 }
 free(r);return(rep);
}

long galoisprim8(po,r,ca,pr)
GEN po,*r;
long ca,pr;
{
 long rep;
PRIM_8_1:
 rep=isin_G_H(po,r,50,43,pr);
 if(rep){if(!ca) return 43;else return 37;} else goto PRIM_8_2;
PRIM_8_2:
 if(!ca) return 50;else goto PRIM_8_3;
PRIM_8_3:
 rep=isin_G_H(po,r,49,48,pr);
 if(!rep) return 49;else goto PRIM_8_4;
PRIM_8_4:
 rep=isin_G_H(po,r,48,36,pr);
 if(!rep) return 48;else goto PRIM_8_5;
PRIM_8_5:
 rep=isin_G_H(po,r,36,25,pr);
 if(!rep) return 36;else return 25;
}

long galoisimpodd8(po,r,pr,nh)
GEN po,*r;
long pr,nh;
{
 long rep;
IMPODD_8_1:
 if(nh==47) goto IMPODD_8_2;else goto IMPODD_8_3;
IMPODD_8_2:
 rep=isin_G_H(po,r,47,46,pr);
 if(rep) goto IMPODD_8_4;else goto IMPODD_8_5;
IMPODD_8_3:
 if(nh!=44)
 {
  printf("\n\n***** wrong magic number in galois8() *****\n\n");
  fflush(stdout);return -1;
 }
 else goto IMPODD_8_6;
IMPODD_8_4:
 rep=isin_G_H(po,r,46,28,pr);
 if(rep) goto IMPODD_8_7;else return 46;
IMPODD_8_5:
 rep=isin_G_H(po,r,47,35,pr);
 if(rep) goto IMPODD_8_9;else return 47;
IMPODD_8_6:
 rep=isin_G_H(po,r,44,40,pr);
 if(rep) goto IMPODD_8_10;else goto IMPODD_8_11;
IMPODD_8_7:
 rep=isin_G_H(po,r,28,21,pr);
 if(rep) return 21;else goto IMPODD_8_33;
IMPODD_8_9:
 rep=isin_G_H(po,r,35,31,pr);
 if(rep) goto IMPODD_8_13;else goto IMPODD_8_14;
IMPODD_8_10:
 rep=isin_G_H(po,r,40,26,pr);
 if(rep) goto IMPODD_8_15;else goto IMPODD_8_16;
IMPODD_8_11:
 rep=isin_G_H(po,r,44,38,pr);
 if(rep) goto IMPODD_8_17;else goto IMPODD_8_18;
IMPODD_8_12:
 rep=isin_G_H(po,r,16,7,pr);
 if(rep) goto IMPODD_8_19;else return 16;
IMPODD_8_13:
 rep=isin_G_H(po,r,31,21,pr);
 if(rep) return 21;else return 31;
IMPODD_8_14:
 rep=isin_G_H(po,r,35,30,pr);
 if(rep) goto IMPODD_8_34;else goto IMPODD_8_20;
IMPODD_8_15:
 rep=isin_G_H(po,r,26,16,pr);
 if(rep) goto IMPODD_8_12;else goto IMPODD_8_21;
IMPODD_8_16:
 rep=isin_G_H(po,r,40,23,pr);
 if(rep) goto IMPODD_8_22;else return 40;
IMPODD_8_17:
 rep=isin_G_H(po,r,38,31,pr);
 if(rep) goto IMPODD_8_13;else return 38;
IMPODD_8_18:
 rep=isin_G_H(po,r,44,35,pr);
 if(rep) goto IMPODD_8_9;else return 44;
IMPODD_8_19:
 rep=isin_G_H(po,r,7,1,pr);
 if(rep) return 1;else return 7;
IMPODD_8_20:
 rep=isin_G_H(po,r,35,28,pr);
 if(rep) goto IMPODD_8_7;else goto IMPODD_8_23;
IMPODD_8_21:
 rep=isin_G_H(po,r,26,17,pr);
 if(rep) goto IMPODD_8_24;else goto IMPODD_8_25;
IMPODD_8_22:
 rep=isin_G_H(po,r,23,8,pr);
 if(rep) goto IMPODD_8_26;else return 23;
IMPODD_8_23:
 rep=isin_G_H(po,r,35,27,pr);
 if(rep) goto IMPODD_8_27;else goto IMPODD_8_28;
IMPODD_8_24:
 rep=isin_G_H(po,r,17,7,pr);
 if(rep) goto IMPODD_8_19;else return 17;
IMPODD_8_25:
 rep=isin_G_H(po,r,26,15,pr);
 if(rep) goto IMPODD_8_29;else return 26;
IMPODD_8_26:
 rep=isin_G_H(po,r,8,1,pr);
 if(rep) return 1;else return 8;
IMPODD_8_27:
 rep=isin_G_H(po,r,27,16,pr);
 if(rep) goto IMPODD_8_12;else return 27;
IMPODD_8_28:
 rep=isin_G_H(po,r,35,26,pr);
 if(rep) goto IMPODD_8_15;else return 35;
IMPODD_8_29:
 rep=isin_G_H(po,r,15,7,pr);
 if(rep) goto IMPODD_8_19;else goto IMPODD_8_30;
IMPODD_8_30:
 rep=isin_G_H(po,r,15,6,pr);
 if(rep) goto IMPODD_8_31;else goto IMPODD_8_32;
IMPODD_8_31:
 rep=isin_G_H(po,r,6,1,pr);
 if(rep) return 1;else return 6;
IMPODD_8_32:
 rep=isin_G_H(po,r,15,8,pr);
 if(rep) goto IMPODD_8_26;else return 15;
IMPODD_8_33:
 rep=isin_G_H(po,r,28,16,pr);
 if(rep) goto IMPODD_8_12;else return 28;
IMPODD_8_34:
 rep=isin_G_H(po,r,30,21,pr);
 if(rep) return 21;else return 30;
}

long galoisimpeven8(po,r,pr,nh)
GEN po,*r;
long pr,nh;
{
 long rep;
IMPEVEN_8_1:
 if(nh==45) goto IMPEVEN_8_2;else goto IMPEVEN_8_3;
IMPEVEN_8_2:
 rep=isin_G_H(po,r,45,42,pr);
 if(rep) goto IMPEVEN_8_4;else goto IMPEVEN_8_5;
IMPEVEN_8_3:
 if(nh!=39)
 {
  printf("\n\n***** wrong magic number in galois8() *****\n\n");fflush(stdout);
  return -1;
 }
 else goto IMPEVEN_8_6;
IMPEVEN_8_4:
 rep=isin_G_H(po,r,42,34,pr);
 if(rep) goto IMPEVEN_8_7;else goto IMPEVEN_8_8;
IMPEVEN_8_5:
 rep=isin_G_H(po,r,45,41,pr);
 if(rep) goto IMPEVEN_8_9;else return 45;
IMPEVEN_8_6:
 rep=isin_G_H(po,r,39,32,pr);
 if(rep) goto IMPEVEN_8_10;else goto IMPEVEN_8_11;
IMPEVEN_8_7:
 rep=isin_G_H(po,r,34,18,pr);
 if(rep) goto IMPEVEN_8_21;else goto IMPEVEN_8_45;
IMPEVEN_8_8:
 rep=isin_G_H(po,r,42,33,pr);
 if(rep) goto IMPEVEN_8_14;else return 42;
IMPEVEN_8_9:
 rep=isin_G_H(po,r,41,34,pr);
 if(rep) goto IMPEVEN_8_7;else goto IMPEVEN_8_15;
IMPEVEN_8_10:
 rep=isin_G_H(po,r,32,22,pr);
 if(rep) goto IMPEVEN_8_16;else goto IMPEVEN_8_17;
IMPEVEN_8_11:
 rep=isin_G_H(po,r,39,29,pr);
 if(rep) goto IMPEVEN_8_18;else goto IMPEVEN_8_19;
IMPEVEN_8_12:
 rep=isin_G_H(po,r,14,4,pr);
 if(rep) return 4;else return 14;
IMPEVEN_8_14:
 rep=isin_G_H(po,r,33,18,pr);
 if(rep) goto IMPEVEN_8_21;else goto IMPEVEN_8_22;
IMPEVEN_8_15:
 rep=isin_G_H(po,r,41,33,pr);
 if(rep) goto IMPEVEN_8_14;else goto IMPEVEN_8_23;
IMPEVEN_8_16:
 rep=isin_G_H(po,r,22,11,pr);
 if(rep) goto IMPEVEN_8_24;else goto IMPEVEN_8_25;
IMPEVEN_8_17:
 rep=isin_G_H(po,r,32,13,pr);
 if(rep) goto IMPEVEN_8_26;else goto IMPEVEN_8_27;
IMPEVEN_8_18:
 rep=isin_G_H(po,r,29,22,pr);
 if(rep) goto IMPEVEN_8_16;else goto IMPEVEN_8_28;
IMPEVEN_8_19:
 rep=isin_G_H(po,r,39,24,pr);
 if(rep) goto IMPEVEN_8_29;else return 39;
IMPEVEN_8_20:
 rep=isin_G_H(po,r,9,4,pr);
 if(rep) return 4;else goto IMPEVEN_8_30;
IMPEVEN_8_21:
 rep=isin_G_H(po,r,18,10,pr);
 if(rep) goto IMPEVEN_8_31;else goto IMPEVEN_8_32;
IMPEVEN_8_22:
 rep=isin_G_H(po,r,33,13,pr);
 if(rep) goto IMPEVEN_8_26;else return 33;
IMPEVEN_8_23:
 rep=isin_G_H(po,r,41,29,pr);
 if(rep) goto IMPEVEN_8_18;else goto IMPEVEN_8_33;
IMPEVEN_8_24:
 rep=isin_G_H(po,r,11,5,pr);
 if(rep) return 5;else goto IMPEVEN_8_34;
IMPEVEN_8_25:
 rep=isin_G_H(po,r,22,9,pr);
 if(rep) goto IMPEVEN_8_20;else return 22;
IMPEVEN_8_26:
 rep=isin_G_H(po,r,13,3,pr);
 if(rep) return 3;else return 13;
IMPEVEN_8_27:
 rep=isin_G_H(po,r,32,12,pr);
 if(rep) goto IMPEVEN_8_35;else return 32;
IMPEVEN_8_28:
 rep=isin_G_H(po,r,29,20,pr);
 if(rep) goto IMPEVEN_8_36;else goto IMPEVEN_8_37;
IMPEVEN_8_29:
 rep=isin_G_H(po,r,24,14,pr);
 if(rep) goto IMPEVEN_8_12;else goto IMPEVEN_8_38;
IMPEVEN_8_30:
 rep=isin_G_H(po,r,9,3,pr);
 if(rep) return 3;else goto IMPEVEN_8_39;
IMPEVEN_8_31:
 rep=isin_G_H(po,r,10,2,pr);
 if(rep) return 2;else return 10;
IMPEVEN_8_32:
 rep=isin_G_H(po,r,18,9,pr);
 if(rep) goto IMPEVEN_8_20;else return 18;
IMPEVEN_8_33:
 rep=isin_G_H(po,r,41,24,pr);
 if(rep) goto IMPEVEN_8_29;else return 41;
IMPEVEN_8_34:
 rep=isin_G_H(po,r,11,4,pr);
 if(rep) return 4;else goto IMPEVEN_8_44;
IMPEVEN_8_35:
 rep=isin_G_H(po,r,12,5,pr);
 if(rep) return 5;else return 12;
IMPEVEN_8_36:
 rep=isin_G_H(po,r,20,10,pr);
 if(rep) goto IMPEVEN_8_31;else return 20;
IMPEVEN_8_37:
 rep=isin_G_H(po,r,29,19,pr);
 if(rep) goto IMPEVEN_8_40;else goto IMPEVEN_8_41;
IMPEVEN_8_38:
 rep=isin_G_H(po,r,24,13,pr);
 if(rep) goto IMPEVEN_8_26;else goto IMPEVEN_8_42;
IMPEVEN_8_39:
 rep=isin_G_H(po,r,9,2,pr);
 if(rep) return 2;else return 9;
IMPEVEN_8_40:
 rep=isin_G_H(po,r,19,10,pr);
 if(rep) goto IMPEVEN_8_31;else goto IMPEVEN_8_43;
IMPEVEN_8_41:
 rep=isin_G_H(po,r,29,18,pr);
 if(rep) goto IMPEVEN_8_21;else return 29;
IMPEVEN_8_42:
 rep=isin_G_H(po,r,24,9,pr);
 if(rep) goto IMPEVEN_8_20;else return 24;
IMPEVEN_8_43:
 rep=isin_G_H(po,r,19,9,pr);
 if(rep) goto IMPEVEN_8_20;else return 19;
IMPEVEN_8_44:
 rep=isin_G_H(po,r,11,2,pr);
 if(rep) return 2;else return 11;
IMPEVEN_8_45:
 rep=isin_G_H(po,r,34,14,pr);
 if(rep) goto IMPEVEN_8_12;else return 34;
}

PERMUTATION data8(n1,n2,t)
long n1,n2;
GROUP *t;
{
 char sid[N+1];
 long i,nbgr;
 PERMUTATION s;
 
 sid[0]=N;for(i=1;i<=N;i++) sid[i]=i;s=(char*)malloc(N+1);s[0]=N;
 switch(n1)
 {
  case 7:
   switch(n2)
   {
    case 1:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=6;
     (*t)[2][6]=5;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 9:
   switch(n2)
   {
    case 4:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=4;(*t)[2][4]=3;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 10:
   switch(n2)
   {
    case 2:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=6;
     (*t)[2][6]=5;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 11:
   switch(n2)
   {
    case 2:s[1]=1;s[2]=3;s[3]=5;s[4]=8;s[5]=2;s[6]=4;s[7]=6;s[8]=7;nbgr=2;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=5;(*t)[2][4]=6;(*t)[2][5]=3;
     (*t)[2][6]=4;(*t)[2][7]=8;(*t)[2][8]=7;break;
    case 4:s[1]=1;s[2]=3;s[3]=7;s[4]=5;s[5]=2;s[6]=4;s[7]=8;s[8]=6;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 14:
   switch(n2)
   {
    case 4:s[1]=1;s[2]=2;s[3]=4;s[4]=3;s[5]=5;s[6]=6;s[7]=8;s[8]=7;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 15:
   switch(n2)
   {
    case 6:
    case 8:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=6;
     (*t)[2][6]=5;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 16:
   switch(n2)
   {
    case 7:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 18:
   switch(n2)
   {
    case 9:permaff(sid,s);nbgr=3;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=5;(*t)[2][3]=3;(*t)[2][4]=7;(*t)[2][5]=2;
     (*t)[2][6]=6;(*t)[2][7]=4;(*t)[2][8]=8;
     (*t)[3][1]=1;(*t)[3][2]=2;(*t)[3][3]=3;(*t)[3][4]=4;(*t)[3][5]=6;
     (*t)[3][6]=5;(*t)[3][7]=8;(*t)[3][8]=7;break;
    case 10:permaff(sid,s);nbgr=3;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=6;(*t)[2][3]=3;(*t)[2][4]=8;(*t)[2][5]=2;
     (*t)[2][6]=5;(*t)[2][7]=4;(*t)[2][8]=7;
     (*t)[3][1]=1;(*t)[3][2]=5;(*t)[3][3]=3;(*t)[3][4]=7;(*t)[3][5]=2;
     (*t)[3][6]=6;(*t)[3][7]=4;(*t)[3][8]=8;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 19:
   switch(n2)
   {
    case 9:s[1]=1;s[2]=5;s[3]=3;s[4]=8;s[5]=2;s[6]=6;s[7]=4;s[8]=7;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 20:
   switch(n2)
   {
    case 10:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 22:
   switch(n2)
   {
    case 9:s[1]=1;s[2]=3;s[3]=5;s[4]=7;s[5]=2;s[6]=4;s[7]=6;s[8]=8;
     nbgr=6;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=7;(*t)[2][4]=8;(*t)[2][5]=3;
     (*t)[2][6]=4;(*t)[2][7]=6;(*t)[2][8]=5;
     (*t)[3][1]=1;(*t)[3][2]=2;(*t)[3][3]=7;(*t)[3][4]=8;(*t)[3][5]=3;
     (*t)[3][6]=4;(*t)[3][7]=5;(*t)[3][8]=6;
     (*t)[4][1]=1;(*t)[4][2]=2;(*t)[4][3]=5;(*t)[4][4]=6;(*t)[4][5]=3;
     (*t)[4][6]=4;(*t)[4][7]=8;(*t)[4][8]=7;
     (*t)[5][1]=1;(*t)[5][2]=2;(*t)[5][3]=5;(*t)[5][4]=6;(*t)[5][5]=3;
     (*t)[5][6]=4;(*t)[5][7]=7;(*t)[5][8]=8;
     (*t)[6][1]=1;(*t)[6][2]=2;(*t)[6][3]=3;(*t)[6][4]=4;(*t)[6][5]=5;
     (*t)[6][6]=6;(*t)[6][7]=8;(*t)[6][8]=7;break;
    case 11:permaff(sid,s);nbgr=6;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=5;(*t)[2][4]=6;(*t)[2][5]=7;
     (*t)[2][6]=8;(*t)[2][7]=4;(*t)[2][8]=3;
     (*t)[3][1]=1;(*t)[3][2]=2;(*t)[3][3]=5;(*t)[3][4]=6;(*t)[3][5]=7;
     (*t)[3][6]=8;(*t)[3][7]=3;(*t)[3][8]=4;
     (*t)[4][1]=1;(*t)[4][2]=2;(*t)[4][3]=3;(*t)[4][4]=4;(*t)[4][5]=7;
     (*t)[4][6]=8;(*t)[4][7]=6;(*t)[4][8]=5;
     (*t)[5][1]=1;(*t)[5][2]=2;(*t)[5][3]=3;(*t)[5][4]=4;(*t)[5][5]=7;
     (*t)[5][6]=8;(*t)[5][7]=5;(*t)[5][8]=6;
     (*t)[6][1]=1;(*t)[6][2]=2;(*t)[6][3]=3;(*t)[6][4]=4;(*t)[6][5]=5;
     (*t)[6][6]=6;(*t)[6][7]=8;(*t)[6][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 23:
   switch(n2)
   {
    case 8:s[1]=1;s[2]=2;s[3]=3;s[4]=4;s[5]=6;s[6]=5;s[7]=8;s[8]=7;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 26:
   switch(n2)
   {
    case 15:
    case 17:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 28:
   switch(n2)
   {
    case 21:s[1]=1;s[2]=2;s[3]=3;s[4]=4;s[5]=7;s[6]=8;s[7]=5;s[8]=6;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 29:
   switch(n2)
   {
    case 18:
    case 19:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 30:
   switch(n2)
   {
    case 21:s[1]=1;s[2]=2;s[3]=3;s[4]=4;s[5]=7;s[6]=8;s[7]=5;s[8]=6;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 31:
   switch(n2)
   {
    case 21:permaff(sid,s);nbgr=3;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=7;
     (*t)[2][6]=8;(*t)[2][7]=5;(*t)[2][8]=6;
     (*t)[3][1]=1;(*t)[3][2]=2;(*t)[3][3]=5;(*t)[3][4]=6;(*t)[3][5]=7;
     (*t)[3][6]=8;(*t)[3][7]=3;(*t)[3][8]=4;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 32:
   switch(n2)
   {
    case 12:
    case 13:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 33:
   switch(n2)
   {
    case 13:s[1]=1;s[2]=5;s[3]=2;s[4]=6;s[5]=3;s[6]=7;s[7]=4;s[8]=8;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    case 18:s[1]=1;s[2]=2;s[3]=5;s[4]=6;s[5]=3;s[6]=4;s[7]=7;s[8]=8;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 34:
   switch(n2)
   {
    case 14:s[1]=1;s[2]=5;s[3]=2;s[4]=6;s[5]=3;s[6]=7;s[7]=4;s[8]=8;
     nbgr=3;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=8;(*t)[2][7]=6;(*t)[2][8]=7;
     (*t)[3][1]=1;(*t)[3][2]=2;(*t)[3][3]=3;(*t)[3][4]=4;(*t)[3][5]=5;
     (*t)[3][6]=7;(*t)[3][7]=8;(*t)[3][8]=6;break;
    case 18:s[1]=1;s[2]=2;s[3]=5;s[4]=6;s[5]=3;s[6]=4;s[7]=8;s[8]=7;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 39:
   switch(n2)
   {
    case 24:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 40:
   switch(n2)
   {
    case 23:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 41:
   switch(n2)
   {
    case 24:s[1]=1;s[2]=5;s[3]=2;s[4]=6;s[5]=3;s[6]=7;s[7]=4;s[8]=8;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    case 29:s[1]=1;s[2]=2;s[3]=5;s[4]=6;s[5]=3;s[6]=4;s[7]=7;s[8]=8;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 42:
   switch(n2)
   {
    case 34:s[1]=1;s[2]=2;s[3]=3;s[4]=4;s[5]=5;s[6]=6;s[7]=8;s[8]=7;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 45:
   switch(n2)
   {
    case 41:
    case 42:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 46:
   switch(n2)
   {
    case 28:s[1]=1;s[2]=2;s[3]=5;s[4]=6;s[5]=3;s[6]=4;s[7]=7;s[8]=8;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 47:
   switch(n2)
   {
    case 35:s[1]=1;s[2]=2;s[3]=5;s[4]=6;s[5]=3;s[6]=4;s[7]=7;s[8]=8;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 49:
   switch(n2)
     {
     case 48:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=7;break; 
     default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
     }break;
  default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
 }
 return s;
}

long galoismodulo8(pol,car)
GEN pol;
long car;
{
 long i,k,p,nbgroup,numer,nbtyp,nbraye,av,av1,gr[50];
 long fl,lp1,typ[N+1],nbremain,j;
 byteptr d;
 GEN ff,p1,p2;

 TYP8[1][1]=1;TYP8[1][2]=1;TYP8[1][3]=1;TYP8[1][4]=1;TYP8[1][5]=1;TYP8[1][6]=1;
 TYP8[1][7]=1;TYP8[1][8]=1;
 TYP8[2][1]=2;TYP8[2][2]=1;TYP8[2][3]=1;TYP8[2][4]=1;TYP8[2][5]=1;TYP8[2][6]=1;
 TYP8[2][7]=1;TYP8[2][8]=0;
 TYP8[3][1]=2;TYP8[3][2]=2;TYP8[3][3]=1;TYP8[3][4]=1;TYP8[3][5]=1;TYP8[3][6]=1;
 TYP8[3][7]=0;TYP8[3][8]=0;
 TYP8[4][1]=2;TYP8[4][2]=2;TYP8[4][3]=2;TYP8[4][4]=1;TYP8[4][5]=1;TYP8[4][6]=0;
 TYP8[4][7]=0;TYP8[4][8]=0;
 TYP8[5][1]=2;TYP8[5][2]=2;TYP8[5][3]=2;TYP8[5][4]=2;TYP8[5][5]=0;TYP8[5][6]=0;
 TYP8[5][7]=0;TYP8[5][8]=0;
 TYP8[6][1]=3;TYP8[6][2]=1;TYP8[6][3]=1;TYP8[6][4]=1;TYP8[6][5]=1;TYP8[6][6]=1;
 TYP8[6][7]=0;TYP8[6][8]=0;
 TYP8[7][1]=3;TYP8[7][2]=2;TYP8[7][3]=1;TYP8[7][4]=1;TYP8[7][5]=1;TYP8[7][6]=0;
 TYP8[7][7]=0;TYP8[7][8]=0;
 TYP8[8][1]=3;TYP8[8][2]=2;TYP8[8][3]=2;TYP8[8][4]=1;TYP8[8][5]=0;TYP8[8][6]=0;
 TYP8[8][7]=0;TYP8[8][8]=0;
 TYP8[9][1]=3;TYP8[9][2]=3;TYP8[9][3]=1;TYP8[9][4]=1;TYP8[9][5]=0;TYP8[9][6]=0;
 TYP8[9][7]=0;TYP8[9][8]=0;
 TYP8[10][1]=3;TYP8[10][2]=3;TYP8[10][3]=2;TYP8[10][4]=0;TYP8[10][5]=0;
 TYP8[10][6]=0;TYP8[10][7]=0;TYP8[10][8]=0;
 TYP8[11][1]=4;TYP8[11][2]=1;TYP8[11][3]=1;TYP8[11][4]=1;TYP8[11][5]=1;
 TYP8[11][6]=0;TYP8[11][7]=0;TYP8[11][8]=0;
 TYP8[12][1]=4;TYP8[12][2]=2;TYP8[12][3]=1;TYP8[12][4]=1;TYP8[12][5]=0;
 TYP8[12][6]=0;TYP8[12][7]=0;TYP8[12][8]=0;
 TYP8[13][1]=4;TYP8[13][2]=2;TYP8[13][3]=2;TYP8[13][4]=0;TYP8[13][5]=0;
 TYP8[13][6]=0;TYP8[13][7]=0;TYP8[13][8]=0;
 TYP8[14][1]=4;TYP8[14][2]=3;TYP8[14][3]=1;TYP8[14][4]=0;TYP8[14][5]=0;
 TYP8[14][6]=0;TYP8[14][7]=0;TYP8[14][8]=0;
 TYP8[15][1]=4;TYP8[15][2]=4;TYP8[15][3]=0;TYP8[15][4]=0;TYP8[15][5]=0;
 TYP8[15][6]=0;TYP8[15][7]=0;TYP8[15][8]=0;
 TYP8[16][1]=5;TYP8[16][2]=1;TYP8[16][3]=1;TYP8[16][4]=1;TYP8[16][5]=0;
 TYP8[16][6]=0;TYP8[16][7]=0;TYP8[16][8]=0;
 TYP8[17][1]=5;TYP8[17][2]=2;TYP8[17][3]=1;TYP8[17][4]=0;TYP8[17][5]=0;
 TYP8[17][6]=0;TYP8[17][7]=0;TYP8[17][8]=0;
 TYP8[18][1]=5;TYP8[18][2]=3;TYP8[18][3]=0;TYP8[18][4]=0;TYP8[18][5]=0;
 TYP8[18][6]=0;TYP8[18][7]=0;TYP8[18][8]=0;
 TYP8[19][1]=6;TYP8[19][2]=1;TYP8[19][3]=1;TYP8[19][4]=0;TYP8[19][5]=0;
 TYP8[19][6]=0;TYP8[19][7]=0;TYP8[19][8]=0;
 TYP8[20][1]=6;TYP8[20][2]=2;TYP8[20][3]=0;TYP8[20][4]=0;TYP8[20][5]=0;
 TYP8[20][6]=0;TYP8[20][7]=0;TYP8[20][8]=0;
 TYP8[21][1]=7;TYP8[21][2]=1;TYP8[21][3]=0;TYP8[21][4]=0;TYP8[21][5]=0;
 TYP8[21][6]=0;TYP8[21][7]=0;TYP8[21][8]=0;
 TYP8[22][1]=8;TYP8[22][2]=0;TYP8[22][3]=0;TYP8[22][4]=0;TYP8[22][5]=0;
 TYP8[22][6]=0;TYP8[22][7]=0;TYP8[22][8]=0;

 GR8[1]=(long*)malloc(4*5);GR8[1][0]=4;GR8[1][1]=1;GR8[1][2]=5;GR8[1][3]=15;GR8[1][4]=22;
 GR8[2]=(long*)malloc(4*4);GR8[2][0]=103;GR8[2][1]=1;GR8[2][2]=5;GR8[2][3]=15;
 GR8[3]=(long*)malloc(4*3);GR8[3][0]=102;GR8[3][1]=1;GR8[3][2]=5;
 GR8[4]=(long*)malloc(4*4);GR8[4][0]=103;GR8[4][1]=1;GR8[4][2]=5;GR8[4][3]=15;
 GR8[5]=(long*)malloc(4*4);GR8[5][0]=103;GR8[5][1]=1;GR8[5][2]=5;GR8[5][3]=15;
 GR8[6]=(long*)malloc(4*6);GR8[6][0]=5;GR8[6][1]=1;GR8[6][2]=4;GR8[6][3]=5;GR8[6][4]=15;
 GR8[6][5]=22;
 GR8[7]=(long*)malloc(4*6);GR8[7][0]=5;GR8[7][1]=1;GR8[7][2]=3;GR8[7][3]=5;GR8[7][4]=15;
 GR8[7][5]=22;
 GR8[8]=(long*)malloc(4*6);GR8[8][0]=5;GR8[8][1]=1;GR8[8][2]=4;GR8[8][3]=5;GR8[8][4]=15;
 GR8[8][5]=22;
 GR8[9]=(long*)malloc(4*5);GR8[9][0]=104;GR8[9][1]=1;GR8[9][2]=3;GR8[9][3]=5;
 GR8[9][4]=15;
 GR8[10]=(long*)malloc(4*5);GR8[10][0]=104;GR8[10][1]=1;GR8[10][2]=3;GR8[10][3]=5;
 GR8[10][4]=15;
 GR8[11]=(long*)malloc(4*5);GR8[11][0]=104;GR8[11][1]=1;GR8[11][2]=3;GR8[11][3]=5;
 GR8[11][4]=15;
 GR8[12]=(long*)malloc(4*6);GR8[12][0]=105;GR8[12][1]=1;GR8[12][2]=5;GR8[12][3]=9;
 GR8[12][4]=15;GR8[12][5]=20;
 GR8[13]=(long*)malloc(4*5);GR8[13][0]=104;GR8[13][1]=1;GR8[13][2]=5;GR8[13][3]=9;
 GR8[13][4]=20;
 GR8[14]=(long*)malloc(4*5);GR8[14][0]=104;GR8[14][1]=1;GR8[14][2]=5;GR8[14][3]=9;
 GR8[14][4]=15;
 GR8[15]=(long*)malloc(4*7);GR8[15][0]=6;GR8[15][1]=1;GR8[15][2]=3;GR8[15][3]=4;
 GR8[15][4]=5;GR8[15][5]=15;GR8[15][6]=22;
 GR8[16]=(long*)malloc(4*6);GR8[16][0]=5;GR8[16][1]=1;GR8[16][2]=3;GR8[16][3]=5;
 GR8[16][4]=15;GR8[16][5]=22;
 GR8[17]=(long*)malloc(4*8);GR8[17][0]=7;GR8[17][1]=1;GR8[17][2]=3;GR8[17][3]=5;
 GR8[17][4]=11;GR8[17][5]=13;GR8[17][6]=15;GR8[17][7]=22;
 GR8[18]=(long*)malloc(4*5);GR8[18][0]=104;GR8[18][1]=1;GR8[18][2]=3;GR8[18][3]=5;
 GR8[18][4]=15;
 GR8[19]=(long*)malloc(4*6);GR8[19][0]=105;GR8[19][1]=1;GR8[19][2]=3;GR8[19][3]=5;
 GR8[19][4]=12;GR8[19][5]=15;
 GR8[20]=(long*)malloc(4*5);GR8[20][0]=104;GR8[20][1]=1;GR8[20][2]=3;GR8[20][3]=5;
 GR8[20][4]=15;
 GR8[21]=(long*)malloc(4*6);GR8[21][0]=5;GR8[21][1]=1;GR8[21][2]=3;GR8[21][3]=5;
 GR8[21][4]=13;GR8[21][5]=15;
 GR8[22]=(long*)malloc(4*5);GR8[22][0]=104;GR8[22][1]=1;GR8[22][2]=3;GR8[22][3]=5;
 GR8[22][4]=15;
 GR8[23]=(long*)malloc(4*8);GR8[23][0]=7;GR8[23][1]=1;GR8[23][2]=4;GR8[23][3]=5;
 GR8[23][4]=9;GR8[23][5]=15;GR8[23][6]=20;GR8[23][7]=22;
 GR8[24]=(long*)malloc(4*7);GR8[24][0]=106;GR8[24][1]=1;GR8[24][2]=3;GR8[24][3]=5;
 GR8[24][4]=9;GR8[24][5]=15;GR8[24][6]=20;
 GR8[25]=(long*)malloc(4*4);GR8[25][0]=103;GR8[25][1]=1;GR8[25][2]=5;GR8[25][3]=21;
 GR8[26]=(long*)malloc(4*9);GR8[26][0]=8;GR8[26][1]=1;GR8[26][2]=3;GR8[26][3]=4;
 GR8[26][4]=5;GR8[26][5]=11;GR8[26][6]=13;GR8[26][7]=15;GR8[26][8]=22;
 GR8[27]=(long*)malloc(4*9);GR8[27][0]=8;GR8[27][1]=1;GR8[27][2]=2;GR8[27][3]=3;
 GR8[27][4]=4;GR8[27][5]=5;GR8[27][6]=13;GR8[27][7]=15;GR8[27][8]=22;
 GR8[28]=(long*)malloc(4*8);GR8[28][0]=7;GR8[28][1]=1;GR8[28][2]=3;GR8[28][3]=5;
 GR8[28][4]=12;GR8[28][5]=13;GR8[28][6]=15;GR8[28][7]=22;
 GR8[29]=(long*)malloc(4*6);GR8[29][0]=105;GR8[29][1]=1;GR8[29][2]=3;GR8[29][3]=5;
 GR8[29][4]=12;GR8[29][5]=15;
 GR8[30]=(long*)malloc(4*8);GR8[30][0]=7;GR8[30][1]=1;GR8[30][2]=3;GR8[30][3]=4;
 GR8[30][4]=5;GR8[30][5]=11;GR8[30][6]=13;GR8[30][7]=15;
 GR8[31]=(long*)malloc(4*8);GR8[31][0]=7;GR8[31][1]=1;GR8[31][2]=2;GR8[31][3]=3;
 GR8[31][4]=4;GR8[31][5]=5;GR8[31][6]=13;GR8[31][7]=15;
 GR8[32]=(long*)malloc(4*7);GR8[32][0]=106;GR8[32][1]=1;GR8[32][2]=3;GR8[32][3]=5;
 GR8[32][4]=9;GR8[32][5]=15;GR8[32][6]=20;
 GR8[33]=(long*)malloc(4*7);GR8[33][0]=106;GR8[33][1]=1;GR8[33][2]=3;GR8[33][3]=5;
 GR8[33][4]=9;GR8[33][5]=15;GR8[33][6]=20;
 GR8[34]=(long*)malloc(4*6);GR8[34][0]=105;GR8[34][1]=1;GR8[34][2]=3;GR8[34][3]=5;
 GR8[34][4]=9;GR8[34][5]=15;
 GR8[35]=(long*)malloc(4*11);GR8[35][0]=10;GR8[35][1]=1;GR8[35][2]=2;GR8[35][3]=3;
 GR8[35][4]=4;GR8[35][5]=5;GR8[35][6]=11;GR8[35][7]=12;GR8[35][8]=13;GR8[35][9]=15;
 GR8[35][10]=22;
 GR8[36]=(long*)malloc(4*6);GR8[36][0]=105;GR8[36][1]=1;GR8[36][2]=5;GR8[36][3]=9;
 GR8[36][4]=20;GR8[36][5]=21;
 GR8[37]=(long*)malloc(4*6);GR8[37][0]=105;GR8[37][1]=1;GR8[37][2]=5;GR8[37][3]=9;
 GR8[37][4]=15;GR8[37][5]=21;
 GR8[38]=(long*)malloc(4*12);GR8[38][0]=11;GR8[38][1]=1;GR8[38][2]=2;GR8[38][3]=3;
 GR8[38][4]=4;GR8[38][5]=5;GR8[38][6]=9;GR8[38][7]=10;GR8[38][8]=13;GR8[38][9]=15;
 GR8[38][10]=19;GR8[38][11]=20;
 GR8[39]=(long*)malloc(4*8);GR8[39][0]=107;GR8[39][1]=1;GR8[39][2]=3;GR8[39][3]=5;
 GR8[39][4]=9;GR8[39][5]=12;GR8[39][6]=15;GR8[39][7]=20;
 GR8[40]=(long*)malloc(4*11);GR8[40][0]=10;GR8[40][1]=1;GR8[40][2]=3;GR8[40][3]=4;
 GR8[40][4]=5;GR8[40][5]=9;GR8[40][6]=11;GR8[40][7]=13;GR8[40][8]=15;GR8[40][9]=20;
 GR8[40][10]=22;
 GR8[41]=(long*)malloc(4*8);GR8[41][0]=107;GR8[41][1]=1;GR8[41][2]=3;GR8[41][3]=5;
 GR8[41][4]=9;GR8[41][5]=12;GR8[41][6]=15;GR8[41][7]=20;
 GR8[42]=(long*)malloc(4*9);GR8[42][0]=108;GR8[42][1]=1;GR8[42][2]=3;GR8[42][3]=5;
 GR8[42][4]=6;GR8[42][5]=8;GR8[42][6]=9;GR8[42][7]=15;GR8[42][8]=20;
 GR8[43]=(long*)malloc(4*9);GR8[43][0]=8;GR8[43][1]=1;GR8[43][2]=4;GR8[43][3]=5;
 GR8[43][4]=9;GR8[43][5]=15;GR8[43][6]=19;GR8[43][7]=21;GR8[43][8]=22;
 GR8[44]=(long*)malloc(4*15);GR8[44][0]=14;GR8[44][1]=1;GR8[44][2]=2;GR8[44][3]=3;
 GR8[44][4]=4;GR8[44][5]=5;GR8[44][6]=9;GR8[44][7]=10;GR8[44][8]=11;GR8[44][9]=12;
 GR8[44][10]=13;GR8[44][11]=15;GR8[44][12]=19;GR8[44][13]=20;GR8[44][14]=22;
 GR8[45]=(long*)malloc(4*10);GR8[45][0]=109;GR8[45][1]=1;GR8[45][2]=3;GR8[45][3]=5;
 GR8[45][4]=6;GR8[45][5]=8;GR8[45][6]=9;GR8[45][7]=12;GR8[45][8]=15;GR8[45][9]=20;
 GR8[46]=(long*)malloc(4*11);GR8[46][0]=10;GR8[46][1]=1;GR8[46][2]=3;GR8[46][3]=5;
 GR8[46][4]=6;GR8[46][5]=8;GR8[46][6]=9;GR8[46][7]=12;GR8[46][8]=13;GR8[46][9]=15;
 GR8[46][10]=22;
 GR8[47]=(long*)malloc(4*17);GR8[47][0]=16;GR8[47][1]=1;GR8[47][2]=2;GR8[47][3]=3;
 GR8[47][4]=4;GR8[47][5]=5;GR8[47][6]=6;GR8[47][7]=7;GR8[47][8]=8;GR8[47][9]=9;
 GR8[47][10]=11;GR8[47][11]=12;GR8[47][12]=13;GR8[47][13]=14;GR8[47][14]=15;
 GR8[47][15]=20;GR8[47][16]=22;
 GR8[48]=(long*)malloc(4*9);GR8[48][0]=108;GR8[48][1]=1;GR8[48][2]=3;GR8[48][3]=5;
 GR8[48][4]=9;GR8[48][5]=12;GR8[48][6]=15;GR8[48][7]=20;GR8[48][8]=21;

 for(i=1;i<51;i++) gr[i]=1;av=avma;nbgroup=49;nbtyp=22;
 k=1;d=diffptr;p= *d;if(car) nbremain=28;else nbremain=22;
 while(k<15)
 {
  av1=avma;ff=simplefactmod(pol,stoi(p));p1=(GEN)ff[1];p2=(GEN)ff[2];lp1=lg(p1);fl=i=1;
  while(fl&&(i<lp1)){if(itos((GEN)(p2[i]))==1) i++;else fl=0;}
  if(i>=lp1)
  {
   for(j=1;j<lp1;j++) typ[j]=itos((GEN)(p1[lp1-j]));
   for(j=lp1;j<=N;j++) typ[j]=0;ranger(typ,N);numer=numerotyp8(typ,nbtyp);
   if(car) nbraye=rayergrouppair8(numer,gr,nbgroup);
   else nbraye=rayergroupimpair8(numer,gr,nbgroup);nbremain-=nbraye;
   if(nbremain==1)
   {avma=av;for(i=1;i<49;i++) free(GR8[i]);if(car) return 49;else return 50;}
  }
  avma=av1;k++;p=p+(*(++d));
 }
 if(nbremain>1){avma=av;for(i=1;i<49;i++) free(GR8[i]);return 0;}
}

long rayergrouppair8(num,gr,nbgr)
long num,*gr,nbgr;
{
 long r,i,nb,fl,j;
 r=0;
 for(i=1;i<nbgr;i++)
 {
  if((GR8[i][0]>100)&&(gr[i]))
  {
   nb=GR8[i][0]-100;fl=1;j=1;while(fl&&(j<=nb)){if(num==GR8[i][j]) fl=0;else j++;}
   if(fl){gr[i]=0;r++;}
  }
 }
 return r;
}

long rayergroupimpair8(num,gr,nbgr)
long num,*gr,nbgr;
{
 long r,i,nb,fl,j;
 r=0;
 for(i=1;i<nbgr;i++)
 {
  if((GR8[i][0]<100)&&(gr[i]))
  {
   nb=GR8[i][0];fl=1;j=1;while(fl&&(j<=nb)){if(num==GR8[i][j]) fl=0;else j++;}
   if(fl){gr[i]=0;r++;}
  }
 }
 return r;
}

long numerotyp8(typ,nb) /*0 si typ n'est pas un des TYP8[i],i si typ=TYP8[i]*/
long *typ,nb;
{
 long i,fl;
 fl=i=1;while(fl&&(i<=nb)){fl=compareupletlong(typ,TYP8[i],N);i++;}
 if(fl){printf("\n ***** non consistent type in numerotyp8() *****\n");exit(0);}
 else return(i-1);
}

/* BIBLIOTHEQUE POUR LE DEGRE 9 */

long closure9(po,ca,pr)
GEN po;
long ca,pr;
{
 long nbrac,rep;
 GEN *r;

 PRMAX=pr+5;TSCHMAX=1;
 r=(GEN*)malloc(4*N-4);
 *r=roots(po,PRMAX);nbrac=lg(*r)-1;
 if(nbrac!=N)
 {
  printf("\n\n***** incompatible number of roots in closure9() *****\n\n");
  fflush(stdout);exit(0);
 }
 preci(r,pr);
 if(!ca)
 {
 CLOS_9_1:
  rep=isin_G_H(po,r,34,31,pr);
  if(!rep) rep=galoisprim9(po,r,ca,pr);
  else rep=galoisimpodd9(po,r,pr);
 }
 else
 {
 CLOS_9_2:
  rep=isin_G_H(po,r,33,30,pr);
  if(!rep) rep=galoisprim9(po,r,ca,pr);
  else rep=galoisimpeven9(po,r,pr);
 }
 free(r);return(rep);
}

long galoisprim9(po,r,ca,pr)
GEN po,*r;
long ca,pr;
{
 long rep;
 if(ca) goto PRIM_9_5 ;else goto PRIM_9_1;
PRIM_9_1:
 rep=isin_G_H(po,r,34,26,pr);
 if(rep) goto PRIM_9_2;else return 34;
PRIM_9_2:
 rep=isin_G_H(po,r,26,19,pr);
 if(rep) goto PRIM_9_3;else return 26;
PRIM_9_3:
 rep=isin_G_H(po,r,19,16,pr);
 if(rep) return 16;else goto PRIM_9_4;
PRIM_9_4:
 rep=isin_G_H(po,r,19,15,pr);
 if(rep) return 15;else return 19;
PRIM_9_5:
 rep=isin_G_H(po,r,33,32,pr);
 if(rep) goto PRIM_9_6;else goto PRIM_9_7;
PRIM_9_6:
 rep=isin_G_H(po,r,32,27,pr);
 if(rep) return 27;else return 32;
PRIM_9_7:
 rep=isin_G_H(po,r,33,23,pr);
 if(rep) goto PRIM_9_8;else return 33;
PRIM_9_8:
 rep=isin_G_H(po,r,23,14,pr);
 if(rep) goto PRIM_9_9;else return 23;
PRIM_9_9:
 rep=isin_G_H(po,r,14,9,pr);
 if(rep) return 9;else return 14;
}

long galoisimpodd9(po,r,pr)
GEN po,*r;
long pr;
{
 long rep;
IMPODD_9_1:
 rep=isin_G_H(po,r,31,29,pr);
 if(rep) goto IMPODD_9_2;else goto IMPODD_9_5;
IMPODD_9_2:
 rep=isin_G_H(po,r,29,20,pr);
 if(rep) goto IMPODD_9_3;else return 29;
IMPODD_9_3:
 rep=isin_G_H(po,r,20,12,pr);
 if(rep) goto IMPODD_9_4;else return 20;
IMPODD_9_4:
 rep=isin_G_H(po,r,12,4,pr);
 if(rep) return 4; else return 12;
IMPODD_9_5:
 rep=isin_G_H(po,r,31,28,pr);
 if(rep) goto IMPODD_9_6;else goto IMPODD_9_9;
IMPODD_9_6:
 rep=isin_G_H(po,r,28,22,pr);
 if(rep) goto IMPODD_9_7;else return 28;
IMPODD_9_7:
 rep=isin_G_H(po,r,22,13,pr);
 if(rep) goto IMPODD_9_8;else return 22;
IMPODD_9_8:
 rep=isin_G_H(po,r,13,4,pr);
 if(rep) return 4;else return 13;
IMPODD_9_9:
 rep=isin_G_H(po,r,31,24,pr);
 if(rep) goto IMPODD_9_10;else return 31;
IMPODD_9_10:
 rep=isin_G_H(po,r,24,22,pr);
 if(rep) goto IMPODD_9_7;else goto IMPODD_9_11;
IMPODD_9_11:
 rep=isin_G_H(po,r,24,20,pr);
 if(rep) goto IMPODD_9_3;else goto IMPODD_9_12;
IMPODD_9_12:
 rep=isin_G_H(po,r,24,18,pr);
 if(rep) goto IMPODD_9_13;else return 24;
IMPODD_9_13:
 rep=isin_G_H(po,r,18,13,pr);
 if(rep) goto IMPODD_9_8;else goto IMPODD_9_14;
IMPODD_9_14:
 rep=isin_G_H(po,r,18,12,pr);
 if(rep) goto IMPODD_9_4;else goto IMPODD_9_15;
IMPODD_9_15:
 rep=isin_G_H(po,r,18,8,pr);
 if(rep) goto IMPODD_9_16;else return 18;
IMPODD_9_16:
 rep=isin_G_H(po,r,8,4,pr);
 if(rep) return 4;else return 8;
}

long galoisimpeven9(po,r,pr)
GEN po,*r;
long pr;
{
 long rep;
IMPEVEN_9_1:
 rep=isin_G_H(po,r,30,25,pr);
 if(rep) goto IMPEVEN_9_2;else goto IMPEVEN_9_7;
IMPEVEN_9_2:
 rep=isin_G_H(po,r,25,17,pr);
 if(rep) goto IMPEVEN_9_3;else return 25;
IMPEVEN_9_3:
 rep=isin_G_H(po,r,17,7,pr);
 if(rep) goto IMPEVEN_9_4;else goto IMPEVEN_9_5;
IMPEVEN_9_4:
 rep=isin_G_H(po,r,7,2,pr);
 if(rep) return 2; else return 7;
IMPEVEN_9_5:
 rep=isin_G_H(po,r,17,6,pr);
 if(rep) goto IMPEVEN_9_6;else return 17;
IMPEVEN_9_6:
 rep=isin_G_H(po,r,6,1,pr);
 if(rep) return 1;else return 6;
IMPEVEN_9_7:
 rep=isin_G_H(po,r,30,21,pr);
 if(rep) goto IMPEVEN_9_8;else return 30;
IMPEVEN_9_8:
 rep=isin_G_H(po,r,21,17,pr);
 if(rep) goto IMPEVEN_9_3;else goto IMPEVEN_9_9;
IMPEVEN_9_9:
 rep=isin_G_H(po,r,21,11,pr);
 if(rep) goto IMPEVEN_9_10;else goto IMPEVEN_9_13;
IMPEVEN_9_10:
 rep=isin_G_H(po,r,11,7,pr);
 if(rep) goto IMPEVEN_9_4;else goto IMPEVEN_9_11;
IMPEVEN_9_11:
 rep=isin_G_H(po,r,11,5,pr);
 if(rep) goto IMPEVEN_9_12;else return 11;
IMPEVEN_9_12:
 rep=isin_G_H(po,r,5,2,pr);
 if(rep) return 2;else return 5;
IMPEVEN_9_13:
 rep=isin_G_H(po,r,21,10,pr);
 if(rep) goto IMPEVEN_9_14;else return 21;
IMPEVEN_9_14:
 rep=isin_G_H(po,r,10,6,pr);
 if(rep) goto IMPEVEN_9_6;else goto IMPEVEN_9_15;
IMPEVEN_9_15:
 rep=isin_G_H(po,r,10,3,pr);
 if(rep) goto IMPEVEN_9_16;else return 10;
IMPEVEN_9_16:
 rep=isin_G_H(po,r,3,1,pr);
 if(rep) return 1;else return 3;
}

PERMUTATION data9(n1,n2,t)
long n1,n2;
GROUP *t;
{
 char sid[N+1];
 long i,nbgr;
 PERMUTATION s;
 
 sid[0]=N;for(i=1;i<=N;i++) sid[i]=i;s=(char*)malloc(N+1);s[0]=N;
 switch(n1)
 {
  case 6:
   switch(n2)
   {
    case 1:permaff(sid,s);nbgr=3;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=9;(*t)[2][9]=7;
     (*t)[3][1]=1;(*t)[3][2]=2;(*t)[3][3]=3;(*t)[3][4]=4;(*t)[3][5]=5;
     (*t)[3][6]=6;(*t)[3][7]=9;(*t)[3][8]=7;(*t)[3][9]=8;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 7:
   switch(n2)
   {
    case 2:permaff(sid,s);nbgr=3;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=9;(*t)[2][9]=7;
     (*t)[3][1]=1;(*t)[3][2]=2;(*t)[3][3]=3;(*t)[3][4]=4;(*t)[3][5]=5;
     (*t)[3][6]=6;(*t)[3][7]=9;(*t)[3][8]=7;(*t)[3][9]=8;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 8:
   switch(n2)
   {
    case 4:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=4;(*t)[2][3]=7;(*t)[2][4]=2;(*t)[2][5]=5;
     (*t)[2][6]=8;(*t)[2][7]=3;(*t)[2][8]=6;(*t)[2][9]=9;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 12:
   switch(n2)
   {
    case 4:permaff(sid,s);nbgr=3;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=9;(*t)[2][9]=7;
     (*t)[3][1]=1;(*t)[3][2]=2;(*t)[3][3]=3;(*t)[3][4]=4;(*t)[3][5]=5;
     (*t)[3][6]=6;(*t)[3][7]=9;(*t)[3][8]=7;(*t)[3][9]=8;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 13:
   switch(n2)
   {
    case 4:s[1]=1;s[2]=4;s[3]=7;s[4]=2;s[5]=5;s[6]=8;s[7]=3;s[8]=6;s[9]=9;nbgr=1;
     *t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 14:
   switch(n2)
   {
    case 9:permaff(sid,s);nbgr=3;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=5;(*t)[2][5]=6;
     (*t)[2][6]=4;(*t)[2][7]=9;(*t)[2][8]=7;(*t)[2][9]=8;
     (*t)[3][1]=1;(*t)[3][2]=2;(*t)[3][3]=3;(*t)[3][4]=6;(*t)[3][5]=4;
     (*t)[3][6]=5;(*t)[3][7]=8;(*t)[3][8]=9;(*t)[3][9]=7;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 17:
   switch(n2)
   {
    case 6:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=7;(*t)[2][5]=8;
     (*t)[2][6]=9;(*t)[2][7]=4;(*t)[2][8]=5;(*t)[2][9]=6;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
  case 21:
   switch(n2)
   {
    case 10:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=7;(*t)[2][5]=8;
     (*t)[2][6]=9;(*t)[2][7]=4;(*t)[2][8]=5;(*t)[2][9]=6;break;
    default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
   }break;
 case 33:
   switch(n2)
     {
     case 32:permaff(sid,s);nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
       (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
       (*t)[2][6]=6;(*t)[2][7]=7;(*t)[2][8]=9;(*t)[2][9]=8;break;
     default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
     }break;
  default:permaff(sid,s);nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);break;
 }
 return s;
}

long galoismodulo9(pol,car)
GEN pol;
long car;
{
 long i,k,p,nbgroup,numer,nbtyp,nbraye,av,av1,gr[35];
 long fl,lp1,typ[N+1],nbremain,j;
 byteptr d;
 GEN ff,p1,p2;

/*42 TYPES ORDONNES CROISSANT (T[1],...,T[30])*/
 TYP9[1][1]=1;TYP9[1][2]=1;TYP9[1][3]=1;TYP9[1][4]=1;TYP9[1][5]=1;TYP9[1][6]=1;
 TYP9[1][7]=1;TYP9[1][8]=1;TYP9[1][9]=1;
 TYP9[2][1]=2;TYP9[2][2]=1;TYP9[2][3]=1;TYP9[2][4]=1;TYP9[2][5]=1;TYP9[2][6]=1;
 TYP9[2][7]=1;TYP9[2][8]=1;TYP9[2][9]=0;
 TYP9[3][1]=2;TYP9[3][2]=2;TYP9[3][3]=1;TYP9[3][4]=1;TYP9[3][5]=1;TYP9[3][6]=1;
 TYP9[3][7]=1;TYP9[3][8]=0;TYP9[3][9]=0;
 TYP9[4][1]=2;TYP9[4][2]=2;TYP9[4][3]=2;TYP9[4][4]=1;TYP9[4][5]=1;TYP9[4][6]=1;
 TYP9[4][7]=0;TYP9[4][8]=0;TYP9[4][9]=0;
 TYP9[5][1]=2;TYP9[5][2]=2;TYP9[5][3]=2;TYP9[5][4]=2;TYP9[5][5]=1;TYP9[5][6]=0;
 TYP9[5][7]=0;TYP9[5][8]=0;TYP9[5][9]=0;
 TYP9[6][1]=3;TYP9[6][2]=1;TYP9[6][3]=1;TYP9[6][4]=1;TYP9[6][5]=1;TYP9[6][6]=1;
 TYP9[6][7]=1;TYP9[6][8]=0;TYP9[6][9]=0;
 TYP9[7][1]=3;TYP9[7][2]=2;TYP9[7][3]=1;TYP9[7][4]=1;TYP9[7][5]=1;TYP9[7][6]=1;
 TYP9[7][7]=0;TYP9[7][8]=0;TYP9[7][9]=0;
 TYP9[8][1]=3;TYP9[8][2]=2;TYP9[8][3]=2;TYP9[8][4]=1;TYP9[8][5]=1;TYP9[8][6]=0;
 TYP9[8][7]=0;TYP9[8][8]=0;TYP9[8][9]=0;
 TYP9[9][1]=3;TYP9[9][2]=2;TYP9[9][3]=2;TYP9[9][4]=2;TYP9[9][5]=0;TYP9[9][6]=0;
 TYP9[9][7]=0;TYP9[9][8]=0;TYP9[9][9]=0;
 TYP9[10][1]=3;TYP9[10][2]=3;TYP9[10][3]=1;TYP9[10][4]=1;TYP9[10][5]=1;
 TYP9[10][6]=0;TYP9[10][7]=0;TYP9[10][8]=0;TYP9[10][9]=0;
 TYP9[11][1]=3;TYP9[11][2]=3;TYP9[11][3]=2;TYP9[11][4]=1;TYP9[11][5]=0;
 TYP9[11][6]=0;TYP9[11][7]=0;TYP9[11][8]=0;TYP9[11][9]=0;
 TYP9[12][1]=3;TYP9[12][2]=3;TYP9[12][3]=3;TYP9[12][4]=0;TYP9[12][5]=0;
 TYP9[12][6]=0;TYP9[12][7]=0;TYP9[12][8]=0;TYP9[12][9]=0;
 TYP9[13][1]=4;TYP9[13][2]=1;TYP9[13][3]=1;TYP9[13][4]=1;TYP9[13][5]=1;
 TYP9[13][6]=1;TYP9[13][7]=0;TYP9[13][8]=0;TYP9[13][9]=0;
 TYP9[14][1]=4;TYP9[14][2]=2;TYP9[14][3]=1;TYP9[14][4]=1;TYP9[14][5]=1;
 TYP9[14][6]=0;TYP9[14][7]=0;TYP9[14][8]=0;TYP9[14][9]=0;
 TYP9[15][1]=4;TYP9[15][2]=2;TYP9[15][3]=2;TYP9[15][4]=1;TYP9[15][5]=0;
 TYP9[15][6]=0;TYP9[15][7]=0;TYP9[15][8]=0;TYP9[15][9]=0;
 TYP9[16][1]=4;TYP9[16][2]=3;TYP9[16][3]=1;TYP9[16][4]=1;TYP9[16][5]=0;
 TYP9[16][6]=0;TYP9[16][7]=0;TYP9[16][8]=0;TYP9[16][9]=0;
 TYP9[17][1]=4;TYP9[17][2]=3;TYP9[17][3]=2;TYP9[17][4]=0;TYP9[17][5]=0;
 TYP9[17][6]=0;TYP9[17][7]=0;TYP9[17][8]=0;TYP9[17][9]=0;
 TYP9[18][1]=4;TYP9[18][2]=4;TYP9[18][3]=1;TYP9[18][4]=0;TYP9[18][5]=0;
 TYP9[18][6]=0;TYP9[18][7]=0;TYP9[18][8]=0;TYP9[18][9]=0;
 TYP9[19][1]=5;TYP9[19][2]=1;TYP9[19][3]=1;TYP9[19][4]=1;TYP9[19][5]=1;
 TYP9[19][6]=0;TYP9[19][7]=0;TYP9[19][8]=0;TYP9[19][9]=0;
 TYP9[20][1]=5;TYP9[20][2]=2;TYP9[20][3]=1;TYP9[20][4]=1;TYP9[20][5]=0;
 TYP9[20][6]=0;TYP9[20][7]=0;TYP9[20][8]=0;TYP9[20][9]=0;
 TYP9[21][1]=5;TYP9[21][2]=2;TYP9[21][3]=2;TYP9[21][4]=0;TYP9[21][5]=0;
 TYP9[21][6]=0;TYP9[21][7]=0;TYP9[21][8]=0;TYP9[21][9]=0;
 TYP9[22][1]=5;TYP9[22][2]=3;TYP9[22][3]=1;TYP9[22][4]=0;TYP9[22][5]=0;
 TYP9[22][6]=0;TYP9[22][7]=0;TYP9[22][8]=0;TYP9[22][9]=0;
 TYP9[23][1]=5;TYP9[23][2]=4;TYP9[23][3]=0;TYP9[23][4]=0;TYP9[23][5]=0;
 TYP9[23][6]=0;TYP9[23][7]=0;TYP9[23][8]=0;TYP9[23][9]=0;
 TYP9[24][1]=6;TYP9[24][2]=1;TYP9[24][3]=1;TYP9[24][4]=1;TYP9[24][5]=0;
 TYP9[24][6]=0;TYP9[24][7]=0;TYP9[24][8]=0;TYP9[24][9]=0;
 TYP9[25][1]=6;TYP9[25][2]=2;TYP9[25][3]=1;TYP9[25][4]=0;TYP9[25][5]=0;
 TYP9[25][6]=0;TYP9[25][7]=0;TYP9[25][8]=0;TYP9[25][9]=0;
 TYP9[26][1]=6;TYP9[26][2]=3;TYP9[26][3]=0;TYP9[26][4]=0;TYP9[26][5]=0;
 TYP9[26][6]=0;TYP9[26][7]=0;TYP9[26][8]=0;TYP9[26][9]=0;
 TYP9[27][1]=7;TYP9[27][2]=1;TYP9[27][3]=1;TYP9[27][4]=0;TYP9[27][5]=0;
 TYP9[27][6]=0;TYP9[27][7]=0;TYP9[27][8]=0;TYP9[27][9]=0;
 TYP9[28][1]=7;TYP9[28][2]=2;TYP9[28][3]=0;TYP9[28][4]=0;TYP9[28][5]=0;
 TYP9[28][6]=0;TYP9[28][7]=0;TYP9[28][8]=0;TYP9[28][9]=0;
 TYP9[29][1]=8;TYP9[29][2]=1;TYP9[29][3]=0;TYP9[29][4]=0;TYP9[29][5]=0;
 TYP9[29][6]=0;TYP9[29][7]=0;TYP9[29][8]=0;TYP9[29][9]=0;
 TYP9[30][1]=9;TYP9[30][2]=0;TYP9[30][3]=0;TYP9[30][4]=0;TYP9[30][5]=0;
 TYP9[30][6]=0;TYP9[30][7]=0;TYP9[30][8]=0;TYP9[30][9]=0;

 GR9[1]=(long*)malloc(4*4);GR9[1][0]=103;GR9[1][1]=1;GR9[1][2]=12;GR9[1][3]=30;
 GR9[2]=(long*)malloc(4*3);GR9[2][0]=102;GR9[2][1]=1;GR9[2][2]=12;
 GR9[3]=(long*)malloc(4*5);GR9[3][0]=104;GR9[3][1]=1;GR9[3][2]=5;GR9[3][3]=12;
 GR9[3][4]=30;
 GR9[4]=(long*)malloc(4*5);GR9[4][0]=4;GR9[4][1]=1;GR9[4][2]=4;GR9[4][3]=12;
 GR9[4][4]=26;
 GR9[5]=(long*)malloc(4*4);GR9[5][0]=103;GR9[5][1]=1;GR9[5][2]=5;GR9[5][3]=12;
 GR9[6]=(long*)malloc(4*5);GR9[6][0]=104;GR9[6][1]=1;GR9[6][2]=10;GR9[6][3]=12;
 GR9[6][4]=30;
 GR9[7]=(long*)malloc(4*4);GR9[7][0]=103;GR9[7][1]=1;GR9[7][2]=10;GR9[7][3]=12;
 GR9[8]=(long*)malloc(4*6);GR9[8][0]=5;GR9[8][1]=1;GR9[8][2]=4;GR9[8][3]=5;
 GR9[8][4]=12;GR9[8][5]=26;
 GR9[9]=(long*)malloc(4*5);GR9[9][0]=104;GR9[9][1]=1;GR9[9][2]=5;GR9[9][3]=12;
 GR9[9][4]=18;
 GR9[10]=(long*)malloc(4*7);GR9[10][0]=106;GR9[10][1]=1;GR9[10][2]=5;GR9[10][3]=10;
 GR9[10][4]=12;GR9[10][5]=25;GR9[10][6]=30;
 GR9[11]=(long*)malloc(4*6);GR9[11][0]=105;GR9[11][1]=1;GR9[11][2]=5;GR9[11][3]=10;
 GR9[11][4]=12;GR9[11][5]=25;
 GR9[12]=(long*)malloc(4*6);GR9[12][0]=5;GR9[12][1]=1;GR9[12][2]=4;GR9[12][3]=10;
 GR9[12][4]=12;GR9[12][5]=26;
 GR9[13]=(long*)malloc(4*6);GR9[13][0]=5;GR9[13][1]=1;GR9[13][2]=4;GR9[13][3]=10;
 GR9[13][4]=12;GR9[13][5]=26;
 GR9[14]=(long*)malloc(4*5);GR9[14][0]=104;GR9[14][1]=1;GR9[14][2]=5;GR9[14][3]=12;
 GR9[14][4]=18;
 GR9[15]=(long*)malloc(4*6);GR9[15][0]=5;GR9[15][1]=1;GR9[15][2]=5;GR9[15][3]=12;
 GR9[15][4]=18;GR9[15][5]=29;
 GR9[16]=(long*)malloc(4*7);GR9[16][0]=6;GR9[16][1]=1;GR9[16][2]=4;GR9[16][3]=5;
 GR9[16][4]=12;GR9[16][5]=18;GR9[16][6]=26;
 GR9[17]=(long*)malloc(4*6);GR9[17][0]=105;GR9[17][1]=1;GR9[17][2]=6;GR9[17][3]=10;
 GR9[17][4]=12;GR9[17][5]=30;
 GR9[18]=(long*)malloc(4*8);GR9[18][0]=7;GR9[18][1]=1;GR9[18][2]=4;GR9[18][3]=5;
 GR9[18][4]=10;GR9[18][5]=12;GR9[18][6]=25;GR9[18][7]=26;
 GR9[19]=(long*)malloc(4*8);GR9[19][0]=7;GR9[19][1]=1;GR9[19][2]=4;GR9[19][3]=5;
 GR9[19][4]=12;GR9[19][5]=18;GR9[19][6]=26;GR9[19][7]=29;
 GR9[20]=(long*)malloc(4*10);GR9[20][0]=9;GR9[20][1]=1;GR9[20][2]=4;GR9[20][3]=6;
 GR9[20][4]=9;GR9[20][5]=10;GR9[20][6]=12;GR9[20][7]=24;GR9[20][8]=26;
 GR9[20][9]=30;
 GR9[21]=(long*)malloc(4*8);GR9[21][0]=107;GR9[21][1]=1;GR9[21][2]=5;GR9[21][3]=6;
 GR9[21][4]=10;GR9[21][5]=12;GR9[21][6]=25;GR9[21][7]=30;
 GR9[22]=(long*)malloc(4*8);GR9[22][0]=7;GR9[22][1]=1;GR9[22][2]=4;GR9[22][3]=6;
 GR9[22][4]=10;GR9[22][5]=12;GR9[22][6]=26;GR9[22][7]=30;
 GR9[23]=(long*)malloc(4*7);GR9[23][0]=106;GR9[23][1]=1;GR9[23][2]=5;GR9[23][3]=10;
 GR9[23][4]=12;GR9[23][5]=18;GR9[23][6]=25;
 GR9[24]=(long*)malloc(4*12);GR9[24][0]=11;GR9[24][1]=1;GR9[24][2]=4;GR9[24][3]=5;
 GR9[24][4]=6;GR9[24][5]=9;GR9[24][6]=10;GR9[24][7]=12;GR9[24][8]=24;
 GR9[24][9]=25;GR9[24][10]=26;GR9[24][11]=30;
 GR9[25]=(long*)malloc(4*8);GR9[25][0]=107;GR9[25][1]=1;GR9[25][2]=3;GR9[25][3]=6;
 GR9[25][4]=8;GR9[25][5]=10;GR9[25][6]=12;GR9[25][7]=30;
 GR9[26]=(long*)malloc(4*10);GR9[26][0]=9;GR9[26][1]=1;GR9[26][2]=4;GR9[26][3]=5;
 GR9[26][4]=10;GR9[26][5]=12;GR9[26][6]=18;GR9[26][7]=25;GR9[26][8]=26;
 GR9[26][9]=29;
 GR9[27]=(long*)malloc(4*6);GR9[27][0]=105;GR9[27][1]=1;GR9[27][2]=5;GR9[27][3]=12;
 GR9[27][4]=27;GR9[27][5]=30;
 GR9[28]=(long*)malloc(4*13);GR9[28][0]=12;GR9[28][1]=1;GR9[28][2]=2;GR9[28][3]=3;
 GR9[28][4]=4;GR9[28][5]=6;GR9[28][6]=7;GR9[28][7]=8;GR9[28][8]=10;
 GR9[28][9]=11;GR9[28][10]=12;GR9[28][11]=26;GR9[28][12]=30;
 GR9[29]=(long*)malloc(4*13);GR9[29][0]=12;GR9[29][1]=1;GR9[29][2]=3;GR9[29][3]=4;
 GR9[29][4]=6;GR9[29][5]=8;GR9[29][6]=9;GR9[29][7]=10;GR9[29][8]=12;
 GR9[29][9]=15;GR9[29][10]=24;GR9[29][11]=26;GR9[29][12]=30;
 GR9[30]=(long*)malloc(4*12);GR9[30][0]=111;GR9[30][1]=1;GR9[30][2]=3;GR9[30][3]=5;
 GR9[30][4]=6;GR9[30][5]=8;GR9[30][6]=10;GR9[30][7]=12;GR9[30][8]=14;
 GR9[30][9]=17;GR9[30][10]=25;GR9[30][11]=30;
 GR9[31]=(long*)malloc(4*20);GR9[31][0]=19;GR9[31][1]=1;GR9[31][2]=2;GR9[31][3]=3;
 GR9[31][4]=4;GR9[31][5]=5;GR9[31][6]=6;GR9[31][7]=7;GR9[31][8]=8;
 GR9[31][9]=9;GR9[31][10]=10;GR9[31][11]=11;GR9[31][12]=12;GR9[31][13]=14;
 GR9[31][14]=15;GR9[31][15]=17;GR9[31][16]=24;GR9[31][17]=25;GR9[31][18]=26;
 GR9[31][19]=30;
 GR9[32]=(long*)malloc(4*8);GR9[32][0]=107;GR9[32][1]=1;GR9[32][2]=5;GR9[32][3]=10;
 GR9[32][4]=12;GR9[32][5]=25;GR9[32][6]=27;GR9[32][7]=30;
  
 for(i=1;i<35;i++) gr[i]=1;av=avma;nbgroup=33;nbtyp=30;
 k=1;d=diffptr;p= *d;if(car) nbremain=18;else nbremain=16;
 while(k<15)
 {
  av1=avma;ff=simplefactmod(pol,stoi(p));p1=(GEN)ff[1];p2=(GEN)ff[2];lp1=lg(p1);fl=i=1;
  while(fl&&(i<lp1)){if(itos((GEN)(p2[i]))==1) i++;else fl=0;}
  if(i>=lp1)
  {
   for(j=1;j<lp1;j++) typ[j]=itos((GEN)(p1[lp1-j]));
   for(j=lp1;j<=N;j++) typ[j]=0;ranger(typ,N);numer=numerotyp9(typ,nbtyp);
   if(car) nbraye=rayergrouppair9(numer,gr,nbgroup);
   else nbraye=rayergroupimpair9(numer,gr,nbgroup);nbremain-=nbraye;
   if(nbremain==1)
   {avma=av;for(i=1;i<=32;i++) free(GR9[i]);if(car) return 33;else return 34;}
  }
  avma=av1;k++;p=p+(*(++d));
 }
 if(nbremain>1){avma=av;for(i=1;i<=32;i++) free(GR9[i]);return 0;}
}

long rayergrouppair9(num,gr,nbgr)
long num,*gr,nbgr;
{
 long r,i,nb,fl,j;
 r=0;
 for(i=1;i<nbgr;i++)
 {
  if((GR9[i][0]>100)&&(gr[i]))
  {
   nb=GR9[i][0]-100;fl=1;j=1;while(fl&&(j<=nb)){if(num==GR9[i][j]) fl=0;else j++;}
   if(fl){gr[i]=0;r++;}
  }
 }
 return r;
}

long rayergroupimpair9(num,gr,nbgr)
long num,*gr,nbgr;
{
 long r,i,nb,fl,j;
 r=0;
 for(i=1;i<nbgr;i++)
 {
  if((GR9[i][0]<100)&&(gr[i]))
  {
   nb=GR9[i][0];fl=1;j=1;while(fl&&(j<=nb)){if(num==GR9[i][j]) fl=0;else j++;}
   if(fl){gr[i]=0;r++;}
  }
 }
 return r;
}

long numerotyp9(typ,nb) /*0 si typ n'est pas un des TYP9[i],i si typ=TYP9[i]*/
  long *typ,nb;
{
 long i,fl;
 fl=i=1;while(fl&&(i<=nb)){fl=compareupletlong(typ,TYP9[i],N);i++;}
 if(fl){printf("\n ***** non consistent type in numerotyp9() *****\n");exit(0);}
 else return(i-1);
}

/* BIBLIOTHEQUE POUR LE DEGRE 10 */

long closure10(po,ca,pr)
GEN po;
long ca,pr;
{
 long nbrac,rep;
 GEN *r;

 PRMAX=pr+5;TSCHMAX=1;r=(GEN*)malloc(4*N-4);
 *r=roots(po,PRMAX);nbrac=lg(*r)-1;
 if(nbrac!=N)
 {
  printf("\n\n***** incompatible number of roots in closure10() *****\n\n");
  fflush(stdout);exit(0);
 }
 preci(r,pr);
 if(ca)
 {
 CLOS_10_1:
  rep=isin_G_H(po,r,44,42,pr);
  if(rep) rep=galoisimpeven10(po,r,pr,42);
  else
  {
  CLOS_10_2:
   rep=isin_G_H(po,r,44,37,pr);
   if(rep) rep=galoisimpeven10(po,r,pr,37);
   else rep=galoisprim10(po,r,ca,pr);
  }
 }
 else
 {
 CLOS_10_3:
  rep=isin_G_H(po,r,45,43,pr);
  if(rep) rep=galoisimpodd10(po,r,pr,43);
  else
  {
  CLOS_10_4:
   rep=isin_G_H(po,r,45,39,pr);
   if(rep) rep=galoisimpodd10(po,r,pr,39);
   else rep=galoisprim10(po,r,ca,pr);
  }
}
 free(r);return(rep);
}

long galoisprim10(po,r,ca,pr)
GEN po,*r;
long ca,pr;
{
 long rep;
 if(ca)
 {
 PRIM_10_1:
  rep=isin_G_H(po,r,44,31,pr);
  if(rep) goto PRIM_10_2;else return 44;
 PRIM_10_2:
  rep=isin_G_H(po,r,31,26,pr);
  if(rep) goto PRIM_10_3;else return 31;
 PRIM_10_3:
  rep=isin_G_H(po,r,26,7,pr);
  if(rep) return 7;else return 26;
 }
 else
 {
 PRIM_10_4:
  rep=isin_G_H(po,r,45,35,pr);
  if(rep) goto PRIM_10_5;else return 45;
 PRIM_10_5:
  rep=isin_G_H(po,r,35,32,pr);
  if(rep) goto PRIM_10_6;else goto PRIM_10_7;
 PRIM_10_6:
  rep=isin_G_H(po,r,32,13,pr);
  if(rep) return 13;else return 32;
 PRIM_10_7:
  rep=isin_G_H(po,r,35,30,pr);
  if(rep) return 30;else return 35;
 }
}

long galoisimpeven10(po,r,pr,nogr)
GEN po,*r;
long pr,nogr;
{
 long rep;
 if(nogr==42)
 {
 IMPEVEN_10_1:
  rep=isin_G_H(po,r,42,28,pr);
  if(rep) goto IMPEVEN_10_2;else return 42;
 IMPEVEN_10_2:
  rep=isin_G_H(po,r,28,18,pr);
  if(rep) return 18;else return 28;
 }
 else
 {
 IMPEVEN_10_3:
  rep=isin_G_H(po,r,37,34,pr);
  if(rep) goto IMPEVEN_10_4;else goto IMPEVEN_10_5;
 IMPEVEN_10_4:
  rep=isin_G_H(po,r,34,15,pr);
  if(rep) goto IMPEVEN_10_6; else return 34;
 IMPEVEN_10_5:
  rep=isin_G_H(po,r,37,24,pr);
  if(rep) goto IMPEVEN_10_7; else return 37;
 IMPEVEN_10_6:
  rep=isin_G_H(po,r,15,8,pr);
  if(rep) return 8; else return 15;
 IMPEVEN_10_7:
  rep=isin_G_H(po,r,24,15,pr);
  if(rep) goto IMPEVEN_10_6; else return 24;
 }
}

long galoisimpodd10(po,r,pr,nogr)
GEN po,*r;
long pr,nogr;
{
 long rep;
 if(nogr==43)
 {
 IMPODD_10_1:
  rep=isin_G_H(po,r,43,41,pr);
  if(rep) goto IMPODD_10_2;else goto IMPODD_10_3;
 IMPODD_10_2:
  rep=isin_G_H(po,r,41,40,pr);
  if(rep) goto IMPODD_10_4;else goto IMPODD_10_5;
 IMPODD_10_3:
  rep=isin_G_H(po,r,43,33,pr);
  if(rep) goto IMPODD_10_6;else return 43;
 IMPODD_10_4:
  rep=isin_G_H(po,r,40,21,pr);
  if(rep) goto IMPODD_10_7;else goto IMPODD_10_8;
 IMPODD_10_5:
  rep=isin_G_H(po,r,41,27,pr);
  if(rep) goto IMPODD_10_9;else goto IMPODD_10_10;
 IMPODD_10_6:
  rep=isin_G_H(po,r,33,27,pr);
  if(rep) goto IMPODD_10_9;else return 33;
 IMPODD_10_7:
  rep=isin_G_H(po,r,21,10,pr);
  if(rep) goto IMPODD_10_12;else goto IMPODD_10_13;
 IMPODD_10_8:
  rep=isin_G_H(po,r,40,12,pr);
  if(rep) goto IMPODD_10_14;else goto IMPODD_10_15;
 IMPODD_10_9:
  rep=isin_G_H(po,r,27,21,pr);
  if(rep) goto IMPODD_10_7;else goto IMPODD_10_16;
 IMPODD_10_10:
  rep=isin_G_H(po,r,41,22,pr);
  if(rep) goto IMPODD_10_11;else return 41;
 IMPODD_10_11:
  rep=isin_G_H(po,r,22,12,pr);
  if(rep) goto IMPODD_10_14;else goto IMPODD_10_18;
 IMPODD_10_12:
  rep=isin_G_H(po,r,10,4,pr);
  if(rep) return 4;else return 10;
 IMPODD_10_13:
  rep=isin_G_H(po,r,21,9,pr);
  if(rep) goto IMPODD_10_19;else return 21;
 IMPODD_10_14:
  rep=isin_G_H(po,r,12,4,pr);
  if(rep) return 4;else return 12;
 IMPODD_10_15:
  rep=isin_G_H(po,r,40,11,pr);
  if(rep) goto IMPODD_10_20;else return 40;
 IMPODD_10_16:
  rep=isin_G_H(po,r,27,20,pr);
  if(rep) goto IMPODD_10_17;else goto IMPODD_10_21;
 IMPODD_10_17:
  rep=isin_G_H(po,r,20,10,pr);
  if(rep) goto IMPODD_10_12;return 20;
 IMPODD_10_18:
  rep=isin_G_H(po,r,22,11,pr);
  if(rep) goto IMPODD_10_20;else goto IMPODD_10_23;
 IMPODD_10_19:
  rep=isin_G_H(po,r,9,6,pr);
  if(rep) goto IMPODD_10_24;else goto IMPODD_10_25;
 IMPODD_10_20:
  rep=isin_G_H(po,r,11,3,pr);
  if(rep) goto IMPODD_10_26;else return 11;
 IMPODD_10_21:
  rep=isin_G_H(po,r,27,19,pr);
  if(rep) goto IMPODD_10_27;else goto IMPODD_10_22;
 IMPODD_10_22:
  rep=isin_G_H(po,r,27,17,pr);
  if(rep) goto IMPODD_10_28;else return 27;
 IMPODD_10_23:
  rep=isin_G_H(po,r,22,5,pr);
  if(rep) goto IMPODD_10_29;else return 22;
 IMPODD_10_24:
  rep=isin_G_H(po,r,6,2,pr);
  if(rep) return 2;else goto IMPODD_10_30;
 IMPODD_10_25:
  rep=isin_G_H(po,r,9,3,pr);
  if(rep) goto IMPODD_10_26;else return 9;
 IMPODD_10_26:
  rep=isin_G_H(po,r,3,2,pr);
  if(rep) return 2;else goto IMPODD_10_31;
 IMPODD_10_27:
  rep=isin_G_H(po,r,19,9,pr);
  if(rep) goto IMPODD_10_19;else return 19;
 IMPODD_10_28:
  rep=isin_G_H(po,r,17,10,pr);
  if(rep) goto IMPODD_10_12;else goto IMPODD_10_32;
 IMPODD_10_29:
  rep=isin_G_H(po,r,5,4,pr);
  if(rep) return 4;else goto IMPODD_10_33;
 IMPODD_10_30:
  rep=isin_G_H(po,r,6,1,pr);
  if(rep) return 1;else return 6;
 IMPODD_10_31:
  rep=isin_G_H(po,r,3,1,pr);
  if(rep) return 1;else return 3;
 IMPODD_10_32:
  rep=isin_G_H(po,r,17,9,pr);
  if(rep) goto IMPODD_10_19;else goto IMPODD_10_60;
 IMPODD_10_33:
  rep=isin_G_H(po,r,5,3,pr);
  if(rep) goto IMPODD_10_26;else return 5;
 IMPODD_10_60:
  rep=isin_G_H(po,r,17,5,pr);
  if(rep) goto IMPODD_10_29;else return 17;
 }
 else
 {
 IMPODD_10_34:
  rep=isin_G_H(po,r,39,38,pr);
  if(rep) goto IMPODD_10_35;else goto IMPODD_10_36;
 IMPODD_10_35:
  rep=isin_G_H(po,r,38,25,pr);
  if(rep) goto IMPODD_10_37;else goto IMPODD_10_38;
 IMPODD_10_36:
  rep=isin_G_H(po,r,39,36,pr);
  if(rep) goto IMPODD_10_39;else goto IMPODD_10_40;
 IMPODD_10_37:
  rep=isin_G_H(po,r,25,4,pr);
  if(rep) return 4;else return 25;
 IMPODD_10_38:
  rep=isin_G_H(po,r,38,12,pr);
  if(rep) goto IMPODD_10_41;else return 38;
 IMPODD_10_39:
  rep=isin_G_H(po,r,36,23,pr);
  if(rep) goto IMPODD_10_42;else goto IMPODD_10_43;
 IMPODD_10_40:
  rep=isin_G_H(po,r,39,29,pr);
  if(rep) goto IMPODD_10_44;else goto IMPODD_10_45;
 IMPODD_10_41:
  rep=isin_G_H(po,r,12,4,pr);
  if(rep) return 4;else return 12;
 IMPODD_10_42:
  rep=isin_G_H(po,r,23,16,pr);
  if(rep) goto IMPODD_10_46;else goto IMPODD_10_47;
 IMPODD_10_43:
  rep=isin_G_H(po,r,36,11,pr);
  if(rep) goto IMPODD_10_48;else return 36;
 IMPODD_10_44:
  rep=isin_G_H(po,r,29,25,pr);
  if(rep) goto IMPODD_10_37;else goto IMPODD_10_49;
 IMPODD_10_45:
  rep=isin_G_H(po,r,39,22,pr);
  if(rep) goto IMPODD_10_50;else return 39;
 IMPODD_10_46:
  rep=isin_G_H(po,r,16,2,pr);
  if(rep) return 2;else return 16;
 IMPODD_10_47:
  rep=isin_G_H(po,r,23,14,pr);
  if(rep) goto IMPODD_10_51;else goto IMPODD_10_52;
 IMPODD_10_48:
  rep=isin_G_H(po,r,11,3,pr);
  if(rep) goto IMPODD_10_53;else return 11;
 IMPODD_10_49:
  rep=isin_G_H(po,r,29,23,pr);
  if(rep) goto IMPODD_10_42;else goto IMPODD_10_54;
 IMPODD_10_50:
  rep=isin_G_H(po,r,22,12,pr);
  if(rep) goto IMPODD_10_41;else goto IMPODD_10_55;
 IMPODD_10_51:
  rep=isin_G_H(po,r,14,1,pr);
  if(rep) return 1;else return 14;
 IMPODD_10_52:
  rep=isin_G_H(po,r,23,3,pr);
  if(rep) goto IMPODD_10_53;else return 23;
 IMPODD_10_53:
  rep=isin_G_H(po,r,3,2,pr);
  if(rep) return 2;else goto IMPODD_10_57;
 IMPODD_10_54:
  rep=isin_G_H(po,r,29,5,pr);
  if(rep) goto IMPODD_10_58;else return 29;
 IMPODD_10_55:
  rep=isin_G_H(po,r,22,11,pr);
  if(rep) goto IMPODD_10_48;else goto IMPODD_10_56;
 IMPODD_10_56:
  rep=isin_G_H(po,r,22,5,pr);
  if(rep) goto IMPODD_10_58;else return 22;
 IMPODD_10_57:
  rep=isin_G_H(po,r,3,1,pr);
  if(rep) return 1;else return 3;
 IMPODD_10_58:
  rep=isin_G_H(po,r,5,4,pr);
  if(rep) return 4;else goto IMPODD_10_59;
 IMPODD_10_59:
  rep=isin_G_H(po,r,5,3,pr);
  if(rep) goto IMPODD_10_53;else return 5;
 }
}

PERMUTATION data10(n1,n2,t)
long n1,n2;
GROUP *t;
{
 char sid[N+1];
 long i,nbgr;
 PERMUTATION s;
 
 sid[0]=N;for(i=1;i<=N;i++) sid[i]=i;s=(char*)malloc(N+1);s[0]=N;
 switch(n1)
 {
  case 6:
   switch(n2)
   {
    case 2:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     s[1]=1;s[2]=2;s[3]=3;s[4]=4;s[5]=5;s[6]=6;s[7]=10;s[8]=9;s[9]=8;s[10]=7;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  case 9:
   switch(n2)
   {
    case 3:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=10;(*t)[2][8]=9;(*t)[2][9]=8;(*t)[2][10]=7;break;
    case 6:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=10;(*t)[2][8]=9;(*t)[2][9]=8;(*t)[2][10]=7;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  case 10:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);
   (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
   (*t)[2][6]=6;(*t)[2][7]=10;(*t)[2][8]=9;(*t)[2][9]=8;(*t)[2][10]=7;break;
  case 14:
  case 16:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
   s[1]=1;s[2]=3;s[3]=5;s[4]=7;s[5]=9;s[6]=2;s[7]=4;s[8]=6;s[9]=8;s[10]=10;break;
  case 17:
   switch(n2)
   {
    case 5:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=10;(*t)[2][8]=9;(*t)[2][9]=8;(*t)[2][10]=7;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  case 19:
  case 20:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);
   (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
   (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=10;(*t)[2][9]=7;(*t)[2][10]=9;break;
  case 21:
   switch(n2)
   {
    case 10:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     s[1]=1;s[2]=2;s[3]=3;s[4]=4;s[5]=5;s[6]=6;s[7]=8;s[8]=10;s[9]=7;s[10]=9;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  case 23:
   switch(n2)
   {
    case 3:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     s[1]=1;s[2]=3;s[3]=5;s[4]=7;s[5]=9;s[6]=2;s[7]=4;s[8]=6;s[9]=8;s[10]=10;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  case 25:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
   s[1]=1;s[2]=3;s[3]=5;s[4]=7;s[5]=9;s[6]=2;s[7]=4;s[8]=6;s[9]=8;s[10]=10;break;
  case 26:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
   s[1]=1;s[2]=2;s[3]=3;s[4]=10;s[5]=6;s[6]=5;s[7]=7;s[8]=4;s[9]=8;s[10]=9;
   (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=4;(*t)[2][4]=9;(*t)[2][5]=6;
   (*t)[2][6]=8;(*t)[2][7]=10;(*t)[2][8]=3;(*t)[2][9]=7;(*t)[2][10]=5;break;
  case 27:
   switch(n2)
   {
    case 17:
    case 21:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=10;(*t)[2][9]=7;(*t)[2][10]=9;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  case 28:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);
   (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
   (*t)[2][6]=6;(*t)[2][7]=8;(*t)[2][8]=10;(*t)[2][9]=7;(*t)[2][10]=9;break;
  case 29:
   switch(n2)
   {
    case 5:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     s[1]=1;s[2]=3;s[3]=5;s[4]=7;s[5]=9;s[6]=2;s[7]=4;s[8]=6;s[9]=8;s[10]=10;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  case 32:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
   s[1]=1;s[2]=2;s[3]=3;s[4]=10;s[5]=6;s[6]=5;s[7]=7;s[8]=4;s[9]=8;s[10]=9;
   (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=4;(*t)[2][4]=9;(*t)[2][5]=6;
   (*t)[2][6]=8;(*t)[2][7]=10;(*t)[2][8]=3;(*t)[2][9]=7;(*t)[2][10]=5;break;   
  case 36:
   switch(n2)
   {
    case 11:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     s[1]=1;s[2]=3;s[3]=5;s[4]=7;s[5]=9;s[6]=2;s[7]=4;s[8]=6;s[9]=8;s[10]=10;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  case 38:
   switch(n2)
   {
    case 12:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     s[1]=1;s[2]=3;s[3]=5;s[4]=7;s[5]=9;s[6]=2;s[7]=4;s[8]=6;s[9]=8;s[10]=10;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  case 39:
   switch(n2)
   {
    case 22:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     s[1]=1;s[2]=3;s[3]=5;s[4]=7;s[5]=9;s[6]=2;s[7]=4;s[8]=6;s[9]=8;s[10]=10;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  case 40:
   switch(n2)
   {
    case 12:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
     s[1]=1;s[2]=2;s[3]=3;s[4]=4;s[5]=5;s[6]=6;s[7]=7;s[8]=8;s[9]=10;s[10]=9;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  case 41:
   switch(n2)
   {
    case 22:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=7;(*t)[2][8]=8;(*t)[2][9]=10;(*t)[2][10]=9;break;
    case 40:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);
     (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;
     (*t)[2][6]=6;(*t)[2][7]=7;(*t)[2][8]=8;(*t)[2][9]=10;(*t)[2][10]=9;break;
    default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
   }break;
  default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
 }
 return s;
}

long galoismodulo10(pol,car)
GEN pol;
long car;
{
 long i,k,p,nbgroup,numer,nbtyp,nbraye,av,av1,gr[46];
 long fl,lp1,typ[N+1],nbremain,j;
 byteptr d;
 GEN ff,p1,p2;

 TYP10[1][1]=10;TYP10[1][2]=0;TYP10[1][3]=0;TYP10[1][4]=0;TYP10[1][5]=0;
 TYP10[1][6]=0;TYP10[1][7]=0;TYP10[1][8]=0;TYP10[1][9]=0;TYP10[1][10]=0;
 TYP10[2][1]=9;TYP10[2][2]=1;TYP10[2][3]=0;TYP10[2][4]=0;TYP10[2][5]=0;
 TYP10[2][6]=0;TYP10[2][7]=0;TYP10[2][8]=0;TYP10[2][9]=0;TYP10[2][10]=0;
 TYP10[3][1]=8;TYP10[3][2]=2;TYP10[3][3]=0;TYP10[3][4]=0;TYP10[3][5]=0;
 TYP10[3][6]=0;TYP10[3][7]=0;TYP10[3][8]=0;TYP10[3][9]=0;TYP10[3][10]=0;
 TYP10[4][1]=8;TYP10[4][2]=1;TYP10[4][3]=1;TYP10[4][4]=0;TYP10[4][5]=0;
 TYP10[4][6]=0;TYP10[4][7]=0;TYP10[4][8]=0;TYP10[4][9]=0;TYP10[4][10]=0;
 TYP10[5][1]=7;TYP10[5][2]=3;TYP10[5][3]=0;TYP10[5][4]=0;TYP10[5][5]=0;
 TYP10[5][6]=0;TYP10[5][7]=0;TYP10[5][8]=0;TYP10[5][9]=0;TYP10[5][10]=0;
 TYP10[6][1]=7;TYP10[6][2]=2;TYP10[6][3]=1;TYP10[6][4]=0;TYP10[6][5]=0;
 TYP10[6][6]=0;TYP10[6][7]=0;TYP10[6][8]=0;TYP10[6][9]=0;TYP10[6][10]=0;
 TYP10[7][1]=7;TYP10[7][2]=1;TYP10[7][3]=1;TYP10[7][4]=1;TYP10[7][5]=0;
 TYP10[7][6]=0;TYP10[7][7]=0;TYP10[7][8]=0;TYP10[7][9]=0;TYP10[7][10]=0;
 TYP10[8][1]=6;TYP10[8][2]=4;TYP10[8][3]=0;TYP10[8][4]=0;TYP10[8][5]=0;
 TYP10[8][6]=0;TYP10[8][7]=0;TYP10[8][8]=0;TYP10[8][9]=0;TYP10[8][10]=0;
 TYP10[9][1]=6;TYP10[9][2]=3;TYP10[9][3]=1;TYP10[9][4]=0;TYP10[9][5]=0;
 TYP10[9][6]=0;TYP10[9][7]=0;TYP10[9][8]=0;TYP10[9][9]=0;TYP10[9][10]=0;
 TYP10[10][1]=6;TYP10[10][2]=2;TYP10[10][3]=2;TYP10[10][4]=0;TYP10[10][5]=0;
 TYP10[10][6]=0;TYP10[10][7]=0;TYP10[10][8]=0;TYP10[10][9]=0;TYP10[10][10]=0;
 TYP10[11][1]=6;TYP10[11][2]=2;TYP10[11][3]=1;TYP10[11][4]=1;TYP10[11][5]=0;
 TYP10[11][6]=0;TYP10[11][7]=0;TYP10[11][8]=0;TYP10[11][9]=0;TYP10[11][10]=0;
 TYP10[12][1]=6;TYP10[12][2]=1;TYP10[12][3]=1;TYP10[12][4]=1;TYP10[12][5]=1;
 TYP10[12][6]=0;TYP10[12][7]=0;TYP10[12][8]=0;TYP10[12][9]=0;TYP10[12][10]=0;
 TYP10[13][1]=5;TYP10[13][2]=5;TYP10[13][3]=0;TYP10[13][4]=0;TYP10[13][5]=0;
 TYP10[13][6]=0;TYP10[13][7]=0;TYP10[13][8]=0;TYP10[13][9]=0;TYP10[13][10]=0;
 TYP10[14][1]=5;TYP10[14][2]=4;TYP10[14][3]=1;TYP10[14][4]=0;TYP10[14][5]=0;
 TYP10[14][6]=0;TYP10[14][7]=0;TYP10[14][8]=0;TYP10[14][9]=0;TYP10[14][10]=0;
 TYP10[15][1]=5;TYP10[15][2]=3;TYP10[15][3]=2;TYP10[15][4]=0;TYP10[15][5]=0;
 TYP10[15][6]=0;TYP10[15][7]=0;TYP10[15][8]=0;TYP10[15][9]=0;TYP10[15][10]=0;
 TYP10[16][1]=5;TYP10[16][2]=3;TYP10[16][3]=1;TYP10[16][4]=1;TYP10[16][5]=0;
 TYP10[16][6]=0;TYP10[16][7]=0;TYP10[16][8]=0;TYP10[16][9]=0;TYP10[16][10]=0;
 TYP10[17][1]=5;TYP10[17][2]=2;TYP10[17][3]=2;TYP10[17][4]=1;TYP10[17][5]=0;
 TYP10[17][6]=0;TYP10[17][7]=0;TYP10[17][8]=0;TYP10[17][9]=0;TYP10[17][10]=0;
 TYP10[18][1]=5;TYP10[18][2]=2;TYP10[18][3]=1;TYP10[18][4]=1;TYP10[18][5]=1;
 TYP10[18][6]=0;TYP10[18][7]=0;TYP10[18][8]=0;TYP10[18][9]=0;TYP10[18][10]=0;
 TYP10[19][1]=5;TYP10[19][2]=1;TYP10[19][3]=1;TYP10[19][4]=1;TYP10[19][5]=1;
 TYP10[19][6]=1;TYP10[19][7]=0;TYP10[19][8]=0;TYP10[19][9]=0;TYP10[19][10]=0;
 TYP10[20][1]=4;TYP10[20][2]=4;TYP10[20][3]=2;TYP10[20][4]=0;TYP10[20][5]=0;
 TYP10[20][6]=0;TYP10[20][7]=0;TYP10[20][8]=0;TYP10[20][9]=0;TYP10[20][10]=0;
 TYP10[21][1]=4;TYP10[21][2]=4;TYP10[21][3]=1;TYP10[21][4]=1;TYP10[21][5]=0;
 TYP10[21][6]=0;TYP10[21][7]=0;TYP10[21][8]=0;TYP10[21][9]=0;TYP10[21][10]=0;
 TYP10[22][1]=4;TYP10[22][2]=3;TYP10[22][3]=3;TYP10[22][4]=0;TYP10[22][5]=0;
 TYP10[22][6]=0;TYP10[22][7]=0;TYP10[22][8]=0;TYP10[22][9]=0;TYP10[22][10]=0;
 TYP10[23][1]=4;TYP10[23][2]=3;TYP10[23][3]=2;TYP10[23][4]=1;TYP10[23][5]=0;
 TYP10[23][6]=0;TYP10[23][7]=0;TYP10[23][8]=0;TYP10[23][9]=0;TYP10[23][10]=0;
 TYP10[24][1]=4;TYP10[24][2]=3;TYP10[24][3]=1;TYP10[24][4]=1;TYP10[24][5]=1;
 TYP10[24][6]=0;TYP10[24][7]=0;TYP10[24][8]=0;TYP10[24][9]=0;TYP10[24][10]=0;
 TYP10[25][1]=4;TYP10[25][2]=2;TYP10[25][3]=2;TYP10[25][4]=2;TYP10[25][5]=0;
 TYP10[25][6]=0;TYP10[25][7]=0;TYP10[25][8]=0;TYP10[25][9]=0;TYP10[25][10]=0;
 TYP10[26][1]=4;TYP10[26][2]=2;TYP10[26][3]=2;TYP10[26][4]=1;TYP10[26][5]=1;
 TYP10[26][6]=0;TYP10[26][7]=0;TYP10[26][8]=0;TYP10[26][9]=0;TYP10[26][10]=0;
 TYP10[27][1]=4;TYP10[27][2]=2;TYP10[27][3]=1;TYP10[27][4]=1;TYP10[27][5]=1;
 TYP10[27][6]=1;TYP10[27][7]=0;TYP10[27][8]=0;TYP10[27][9]=0;TYP10[27][10]=0;
 TYP10[28][1]=4;TYP10[28][2]=1;TYP10[28][3]=1;TYP10[28][4]=1;TYP10[28][5]=1;
 TYP10[28][6]=1;TYP10[28][7]=1;TYP10[28][8]=0;TYP10[28][9]=0;TYP10[28][10]=0;
 TYP10[29][1]=3;TYP10[29][2]=3;TYP10[29][3]=3;TYP10[29][4]=1;TYP10[29][5]=0;
 TYP10[29][6]=0;TYP10[29][7]=0;TYP10[29][8]=0;TYP10[29][9]=0;TYP10[29][10]=0;
 TYP10[30][1]=3;TYP10[30][2]=3;TYP10[30][3]=2;TYP10[30][4]=2;TYP10[30][5]=0;
 TYP10[30][6]=0;TYP10[30][7]=0;TYP10[30][8]=0;TYP10[30][9]=0;TYP10[30][10]=0;
 TYP10[31][1]=3;TYP10[31][2]=3;TYP10[31][3]=2;TYP10[31][4]=1;TYP10[31][5]=1;
 TYP10[31][6]=0;TYP10[31][7]=0;TYP10[31][8]=0;TYP10[31][9]=0;TYP10[31][10]=0;
 TYP10[32][1]=3;TYP10[32][2]=3;TYP10[32][3]=1;TYP10[32][4]=1;TYP10[32][5]=1;
 TYP10[32][6]=1;TYP10[32][7]=0;TYP10[32][8]=0;TYP10[32][9]=0;TYP10[32][10]=0;
 TYP10[33][1]=3;TYP10[33][2]=2;TYP10[33][3]=2;TYP10[33][4]=2;TYP10[33][5]=1;
 TYP10[33][6]=0;TYP10[33][7]=0;TYP10[33][8]=0;TYP10[33][9]=0;TYP10[33][10]=0;
 TYP10[34][1]=3;TYP10[34][2]=2;TYP10[34][3]=2;TYP10[34][4]=1;TYP10[34][5]=1;
 TYP10[34][6]=1;TYP10[34][7]=0;TYP10[34][8]=0;TYP10[34][9]=0;TYP10[34][10]=0;
 TYP10[35][1]=3;TYP10[35][2]=2;TYP10[35][3]=1;TYP10[35][4]=1;TYP10[35][5]=1;
 TYP10[35][6]=1;TYP10[35][7]=1;TYP10[35][8]=0;TYP10[35][9]=0;TYP10[35][10]=0;
 TYP10[36][1]=3;TYP10[36][2]=1;TYP10[36][3]=1;TYP10[36][4]=1;TYP10[36][5]=1;
 TYP10[36][6]=1;TYP10[36][7]=1;TYP10[36][8]=1;TYP10[36][9]=0;TYP10[36][10]=0;
 TYP10[37][1]=2;TYP10[37][2]=2;TYP10[37][3]=2;TYP10[37][4]=2;TYP10[37][5]=2;
 TYP10[37][6]=0;TYP10[37][7]=0;TYP10[37][8]=0;TYP10[37][9]=0;TYP10[37][10]=0;
 TYP10[38][1]=2;TYP10[38][2]=2;TYP10[38][3]=2;TYP10[38][4]=2;TYP10[38][5]=1;
 TYP10[38][6]=1;TYP10[38][7]=0;TYP10[38][8]=0;TYP10[38][9]=0;TYP10[38][10]=0;
 TYP10[39][1]=2;TYP10[39][2]=2;TYP10[39][3]=2;TYP10[39][4]=1;TYP10[39][5]=1;
 TYP10[39][6]=1;TYP10[39][7]=1;TYP10[39][8]=0;TYP10[39][9]=0;TYP10[39][10]=0;
 TYP10[40][1]=2;TYP10[40][2]=2;TYP10[40][3]=1;TYP10[40][4]=1;TYP10[40][5]=1;
 TYP10[40][6]=1;TYP10[40][7]=1;TYP10[40][8]=1;TYP10[40][9]=0;TYP10[40][10]=0;
 TYP10[41][1]=2;TYP10[41][2]=1;TYP10[41][3]=1;TYP10[41][4]=1;TYP10[41][5]=1;
 TYP10[41][6]=1;TYP10[41][7]=1;TYP10[41][8]=1;TYP10[41][9]=1;TYP10[41][10]=0;
 TYP10[42][1]=1;TYP10[42][2]=1;TYP10[42][3]=1;TYP10[42][4]=1;TYP10[42][5]=1;
 TYP10[42][6]=1;TYP10[42][7]=1;TYP10[42][8]=1;TYP10[42][9]=1;TYP10[42][10]=1;
 
/* Liste des types dans le j eme groupe : GR10[j][0]=#{type dans GR10[j]} si
   GR10[j] est impair, et GR10[j][0]=100+#{type dans GR10[j]} si pair */
 GR10[1]=(long*)malloc(4*5);GR10[1][0]=4;
 GR10[1][1]=1;GR10[1][2]=13;GR10[1][3]=37;GR10[1][4]=42;
 GR10[2]=(long*)malloc(4*4);GR10[2][0]=3;
 GR10[2][1]=13;GR10[2][2]=37;GR10[2][3]=42;
 GR10[3]=(long*)malloc(4*6);GR10[3][0]=5;
 GR10[3][1]=1;GR10[3][2]=13;GR10[3][3]=37;GR10[3][4]=38;GR10[3][5]=42;
 GR10[4]=(long*)malloc(4*5);GR10[4][0]=4;
 GR10[4][1]=13;GR10[4][2]=20;GR10[4][3]=38;GR10[4][4]=42;
 GR10[5]=(long*)malloc(4*8);GR10[5][0]=7;
 GR10[5][1]=1;GR10[5][2]=13;GR10[5][3]=20;GR10[5][4]=21;GR10[5][5]=37;
 GR10[5][6]=38;GR10[5][7]=42;
 GR10[6]=(long*)malloc(4*6);GR10[6][0]=5;
 GR10[6][1]=1;GR10[6][2]=13;GR10[6][3]=19;GR10[6][4]=37;GR10[6][5]=42;
 GR10[7]=(long*)malloc(4*5);GR10[7][0]=104;
 GR10[7][1]=13;GR10[7][2]=29;GR10[7][3]=38;GR10[7][4]=42;
 GR10[8]=(long*)malloc(4*5);GR10[8][0]=104;
 GR10[8][1]=13;GR10[8][2]=38;GR10[8][3]=40;GR10[8][4]=42;
 GR10[9]=(long*)malloc(4*7);GR10[9][0]=6;
 GR10[9][1]=1;GR10[9][2]=13;GR10[9][3]=19;GR10[9][4]=37;GR10[9][5]=38;GR10[9][6]=42;
 GR10[10]=(long*)malloc(4*6);GR10[10][0]=5;
 GR10[10][1]=13;GR10[10][2]=19;GR10[10][3]=20;GR10[10][4]=38;GR10[10][5]=42;
 GR10[11]=(long*)malloc(4*8);GR10[11][0]=7;
 GR10[11][1]=1;GR10[11][2]=10;GR10[11][3]=13;GR10[11][4]=32;GR10[11][5]=37;
 GR10[11][6]=38;GR10[11][7]=42;
 GR10[12]=(long*)malloc(4*8);GR10[12][0]=7;
 GR10[12][1]=10;GR10[12][2]=13;GR10[12][3]=20;GR10[12][4]=32;GR10[12][5]=37;
 GR10[12][6]=38;GR10[12][7]=42;
 GR10[13]=(long*)malloc(4*8);GR10[13][0]=7;
 GR10[13][1]=9;GR10[13][2]=13;GR10[13][3]=20;GR10[13][4]=29;GR10[13][5]=38;
 GR10[13][6]=39;GR10[13][7]=42;
 GR10[14]=(long*)malloc(4*9);GR10[14][0]=8;
 GR10[14][1]=1;GR10[14][2]=13;GR10[14][3]=37;GR10[14][4]=38;GR10[14][5]=39;
 GR10[14][6]=40;GR10[14][7]=41;GR10[14][8]=42;
 GR10[15]=(long*)malloc(4*7);GR10[15][0]=106;
 GR10[15][1]=13;GR10[15][2]=21;GR10[15][3]=25;GR10[15][4]=38;GR10[15][5]=40;
 GR10[15][6]=42;
 GR10[16]=(long*)malloc(4*8);GR10[16][0]=7;
 GR10[16][1]=13;GR10[16][2]=20;GR10[16][3]=26;GR10[16][4]=37;GR10[16][5]=38;
 GR10[16][6]=40;GR10[16][7]=42;
 GR10[17]=(long*)malloc(4*9);GR10[17][0]=8;
 GR10[17][1]=1;GR10[17][2]=13;GR10[17][3]=19;GR10[17][4]=20;GR10[17][5]=21;
 GR10[17][6]=37;GR10[17][7]=38;GR10[17][8]=42;
 GR10[18]=(long*)malloc(4*7);GR10[18][0]=106;
 GR10[18][1]=3;GR10[18][2]=13;GR10[18][3]=19;GR10[18][4]=21;GR10[18][5]=38;
 GR10[18][6]=42;
 GR10[19]=(long*)malloc(4*8);GR10[19][0]=7;
 GR10[19][1]=1;GR10[19][2]=13;GR10[19][3]=19;GR10[19][4]=21;GR10[19][5]=37;
 GR10[19][6]=38;GR10[19][7]=42;
 GR10[20]=(long*)malloc(4*7);GR10[20][0]=6;
 GR10[20][1]=13;GR10[20][2]=19;GR10[20][3]=20;GR10[20][4]=21;GR10[20][5]=38;
 GR10[20][6]=42;
 GR10[21]=(long*)malloc(4*10);GR10[21][0]=9;
 GR10[21][1]=1;GR10[21][2]=13;GR10[21][3]=17;GR10[21][4]=19;GR10[21][5]=20;
 GR10[21][6]=37;GR10[21][7]=38;GR10[21][8]=40;GR10[21][9]=42;
 GR10[22]=(long*)malloc(4*12);GR10[22][0]=11;
 GR10[22][1]=1;GR10[22][2]=10;GR10[22][3]=13;GR10[22][4]=20;GR10[22][5]=21;
 GR10[22][6]=30;GR10[22][7]=32;GR10[22][8]=37;GR10[22][9]=38;GR10[22][10]=40;
 GR10[22][11]=42;
 GR10[23]=(long*)malloc(4*13);GR10[23][0]=12;
 GR10[23][1]=1;GR10[23][2]=13;GR10[23][3]=20;GR10[23][4]=21;GR10[23][5]=25;
 GR10[23][6]=26;GR10[23][7]=37;GR10[23][8]=38;GR10[23][9]=39;GR10[23][10]=40;
 GR10[23][11]=41;GR10[23][12]=42;
 GR10[24]=(long*)malloc(4*8);GR10[24][0]=107;
 GR10[24][1]=3;GR10[24][2]=13;GR10[24][3]=21;GR10[24][4]=25;GR10[24][5]=38;
 GR10[24][6]=40;GR10[24][7]=42;
 GR10[25]=(long*)malloc(4*9);GR10[25][0]=8;
 GR10[25][1]=4;GR10[25][2]=13;GR10[25][3]=20;GR10[25][4]=21;GR10[25][5]=25;
 GR10[25][6]=38;GR10[25][7]=40;GR10[25][8]=42;
 GR10[26]=(long*)malloc(4*6);GR10[26][0]=105;
 GR10[26][1]=13;GR10[26][2]=21;GR10[26][3]=29;GR10[26][4]=38;GR10[26][5]=42;
 GR10[27]=(long*)malloc(4*11);GR10[27][0]=10;
 GR10[27][1]=1;GR10[27][2]=13;GR10[27][3]=17;GR10[27][4]=19;GR10[27][5]=20;
 GR10[27][6]=21;GR10[27][7]=37;GR10[27][8]=38;GR10[27][9]=40;GR10[27][10]=42;
 GR10[28]=(long*)malloc(4*9);GR10[28][0]=108;
 GR10[28][1]=3;GR10[28][2]=13;GR10[28][3]=17;GR10[28][4]=19;GR10[28][5]=21;
 GR10[28][6]=38;GR10[28][7]=40;GR10[28][8]=42;
 GR10[29]=(long*)malloc(4*15);GR10[29][0]=14;
 GR10[29][1]=1;GR10[29][2]=3;GR10[29][3]=4;GR10[29][4]=13;GR10[29][5]=20;GR10[29][6]=21;
 GR10[29][7]=25;GR10[29][8]=26;GR10[29][9]=37;GR10[29][10]=38;GR10[29][11]=39;
 GR10[29][12]=40;GR10[29][13]=41;GR10[29][14]=42;
 GR10[30]=(long*)malloc(4*9);GR10[30][0]=8;
 GR10[30][1]=1;GR10[30][2]=4;GR10[30][3]=13;GR10[30][4]=21;GR10[30][5]=29;
 GR10[30][6]=37;GR10[30][7]=38;GR10[30][8]=42;
 GR10[31]=(long*)malloc(4*7);GR10[31][0]=106;
 GR10[31][1]=3;GR10[31][2]=13;GR10[31][3]=21;GR10[31][4]=29;GR10[31][5]=38;
 GR10[31][6]=42;
 GR10[32]=(long*)malloc(4*9);GR10[32][0]=8;
 GR10[32][1]=9;GR10[32][2]=13;GR10[32][3]=20;GR10[32][4]=21;GR10[32][5]=29;
 GR10[32][6]=38;GR10[32][7]=39;GR10[32][8]=42;
 GR10[33]=(long*)malloc(4*15);GR10[33][0]=14;
 GR10[33][1]=1;GR10[33][2]=3;GR10[33][3]=13;GR10[33][4]=14;GR10[33][5]=17;
 GR10[33][6]=19;GR10[33][7]=20;GR10[33][8]=21;GR10[33][9]=26;GR10[33][10]=28;
 GR10[33][11]=37;GR10[33][12]=38;GR10[33][13]=40;GR10[33][14]=42;
 GR10[34]=(long*)malloc(4*10);GR10[34][0]=109;
 GR10[34][1]=11;GR10[34][2]=13;GR10[34][3]=21;GR10[34][4]=25;GR10[34][5]=30;
 GR10[34][6]=32;GR10[34][7]=38;GR10[34][8]=40;GR10[34][9]=42;
 GR10[35]=(long*)malloc(4*13);GR10[35][0]=12;
 GR10[35][1]=1;GR10[35][2]=3;GR10[35][3]=4;GR10[35][4]=9;GR10[35][5]=13;GR10[35][6]=20;
 GR10[35][7]=21;GR10[35][8]=29;GR10[35][9]=37;GR10[35][10]=38;GR10[35][11]=39;
 GR10[35][12]=42;
 GR10[36]=(long*)malloc(4*19);GR10[36][0]=18;
 GR10[36][1]=1;GR10[36][2]=10;GR10[36][3]=11;GR10[36][4]=12;GR10[36][5]=13;
 GR10[36][6]=20;GR10[36][7]=21;GR10[36][8]=25;GR10[36][9]=26;GR10[36][10]=30;
 GR10[36][11]=31;GR10[36][12]=32;GR10[36][13]=37;GR10[36][14]=38;GR10[36][15]=39;
 GR10[36][16]=40;GR10[36][17]=41;GR10[36][18]=42;
 GR10[37]=(long*)malloc(4*13);GR10[37][0]=112;
 GR10[37][1]=3;GR10[37][2]=8;GR10[37][3]=11;GR10[37][4]=13;GR10[37][5]=21;
 GR10[37][6]=25;GR10[37][7]=27;GR10[37][8]=30;GR10[37][9]=32;GR10[37][10]=38;
 GR10[37][11]=40;GR10[37][12]=42;
 GR10[38]=(long*)malloc(4*19);GR10[38][0]=18;
 GR10[38][1]=4;GR10[38][2]=8;GR10[38][3]=10;GR10[38][4]=11;GR10[38][5]=13;
 GR10[38][6]=20;GR10[38][7]=21;GR10[38][8]=22;GR10[38][9]=25;GR10[38][10]=26;
 GR10[38][11]=28;GR10[38][12]=30;GR10[38][13]=32;GR10[38][14]=37;GR10[38][15]=38;
 GR10[38][16]=39;GR10[38][17]=40;GR10[38][18]=42;
 GR10[39]=(long*)malloc(4*25);GR10[39][0]=24;
 GR10[39][1]=1;GR10[39][2]=3;GR10[39][3]=4;GR10[39][4]=8;GR10[39][5]=10;GR10[39][6]=11;
 GR10[39][7]=12;GR10[39][8]=13;GR10[39][9]=20;GR10[39][10]=21;GR10[39][11]=22;
 GR10[39][12]=25;GR10[39][13]=26;GR10[39][14]=27;GR10[39][15]=28;GR10[39][16]=30;
 GR10[39][17]=31;GR10[39][18]=32;GR10[39][19]=37;GR10[39][20]=38;GR10[39][21]=39;
 GR10[39][22]=40;GR10[39][23]=41;GR10[39][24]=42;
 GR10[40]=(long*)malloc(4*15);GR10[40][0]=14;
 GR10[40][1]=1;GR10[40][2]=10;GR10[40][3]=13;GR10[40][4]=16;GR10[40][5]=17;
 GR10[40][6]=19;GR10[40][7]=20;GR10[40][8]=32;GR10[40][9]=34;GR10[40][10]=36;
 GR10[40][11]=37;GR10[40][12]=38;GR10[40][13]=40;GR10[40][14]=42;
 GR10[41]=(long*)malloc(4*19);GR10[41][0]=18;
 GR10[41][1]=1;GR10[41][2]=10;GR10[41][3]=13;GR10[41][4]=16;GR10[41][5]=17;
 GR10[41][6]=19;GR10[41][7]=20;GR10[41][8]=21;GR10[41][9]=23;GR10[41][10]=27;
 GR10[41][11]=30;GR10[41][12]=32;GR10[41][13]=34;GR10[41][14]=36;GR10[41][15]=37;
 GR10[41][16]=38;GR10[41][17]=40;GR10[41][18]=42;
 GR10[42]=(long*)malloc(4*18);GR10[42][0]=117;
 GR10[42][1]=3;GR10[42][2]=8;GR10[42][3]=13;GR10[42][4]=16;GR10[42][5]=17;
 GR10[42][6]=19;GR10[42][7]=21;GR10[42][8]=23;GR10[42][9]=25;GR10[42][10]=27;
 GR10[42][11]=30;GR10[42][12]=32;GR10[42][13]=34;GR10[42][14]=36;GR10[42][15]=38;
 GR10[42][16]=40;GR10[42][17]=42;
 GR10[43]=(long*)malloc(4*33);GR10[43][0]=32;
 GR10[43][1]=1;GR10[43][2]=3;GR10[43][3]=8;GR10[43][4]=10;GR10[43][5]=13;GR10[43][6]=14;
 GR10[43][7]=15;GR10[43][8]=16;GR10[43][9]=17;GR10[43][10]=18;GR10[43][11]=19;
 GR10[43][12]=20;GR10[43][13]=21;GR10[43][14]=23;GR10[43][15]=24;GR10[43][16]=25;
 GR10[43][17]=26;GR10[43][18]=27;GR10[43][19]=28;GR10[43][20]=30;GR10[43][21]=31;
 GR10[43][22]=32;GR10[43][23]=33;GR10[43][24]=34;GR10[43][25]=35;GR10[43][26]=36;
 GR10[43][27]=37;GR10[43][28]=38;GR10[43][29]=39;GR10[43][30]=40;GR10[43][31]=41;
 GR10[43][32]=42;
 GR10[44]=(long*)malloc(4*23);GR10[44][0]=122;
 GR10[44][1]=2;GR10[44][2]=3;GR10[44][3]=5;GR10[44][4]=7;GR10[44][5]=8;GR10[44][6]=11;
 GR10[44][7]=13;GR10[44][8]=16;GR10[44][9]=17;GR10[44][10]=19;GR10[44][11]=21;
 GR10[44][12]=23;GR10[44][13]=25;GR10[44][14]=27;GR10[44][15]=29;GR10[44][16]=30;
 GR10[44][17]=32;GR10[44][18]=34;GR10[44][19]=36;GR10[44][20]=38;GR10[44][21]=40;
 GR10[44][22]=42;
 
 for(i=1;i<46;i++) gr[i]=1;av=avma;nbgroup=45;nbtyp=42;
 k=1;d=diffptr;p= *d;if(car) nbremain=12;else nbremain=33;
 while(k<15)
 {
  av1=avma;ff=simplefactmod(pol,stoi(p));p1=(GEN)ff[1];p2=(GEN)ff[2];lp1=lg(p1);fl=i=1;
  while(fl&&(i<lp1)){if(itos((GEN)(p2[i]))==1) i++;else fl=0;}
  if(i>=lp1)
  {
   for(j=1;j<lp1;j++) typ[j]=itos((GEN)(p1[lp1-j]));
   for(j=lp1;j<=N;j++) typ[j]=0;ranger(typ,N);numer=numerotyp10(typ,nbtyp);
   if(car) nbraye=rayergrouppair10(numer,gr,nbgroup);
   else nbraye=rayergroupimpair10(numer,gr,nbgroup);nbremain-=nbraye;
   if(nbremain==1)
   {avma=av;for(i=1;i<45;i++) free(GR10[i]);if(car) return 44;else return 45;}
  }
  avma=av1;k++;p=p+(*(++d));
 }
 if(nbremain>1){avma=av;for(i=1;i<45;i++) free(GR10[i]);return 0;}
}

long rayergrouppair10(num,gr,nbgr)
long num,*gr,nbgr;
{
 long r,i,nb,fl,j;
 r=0;
 for(i=1;i<nbgr;i++)
 {
  if((GR10[i][0]>100)&&(gr[i]))
  {
   nb=GR10[i][0]-100;fl=1;j=1;while(fl&&(j<=nb)){if(num==GR10[i][j]) fl=0;else j++;}
   if(fl){gr[i]=0;r++;}
  }
 }
 return r;
}

long rayergroupimpair10(num,gr,nbgr)
long num,*gr,nbgr;
{
 long r,i,nb,fl,j;
 r=0;
 for(i=1;i<nbgr;i++)
 {
  if((GR10[i][0]<100)&&(gr[i]))
  {
   nb=GR10[i][0];fl=1;j=1;while(fl&&(j<=nb)){if(num==GR10[i][j]) fl=0;else j++;}
   if(fl){gr[i]=0;r++;}
  }
 }
 return r;
}

long numerotyp10(typ,nb) /*0 si typ n'est pas un des TYP10[i],i si typ=TYP10[i]*/
long *typ,nb;
{
 long i,fl;
 fl=i=1;while(fl&&(i<=nb)){fl=compareupletlong(typ,TYP10[i],N);i++;}
 if(fl){printf("\n ***** non consistent type in numerotyp10() *****\n");exit(0);}
 else return(i-1);
}
  
/* BIBLIOTHEQUE POUR LE DEGRE 11 */

long closure11(po,ca,pr)
GEN po;
long ca,pr;
{
 long nbrac,rep;
 GEN *r;
 
 PRMAX=pr+5;TSCHMAX=1;r=(GEN*)malloc(4*N-4);
 *r=roots(po,PRMAX);nbrac=lg(*r)-1;
 if(nbrac!=N)
 {
  printf("\n\n***** incompatible number of roots in closure11() *****\n\n");
  fflush(stdout);exit(0);
 }
 preci(r,pr);
 if(ca) rep=galoiseven11(po,r,pr);else rep=galoisodd11(po,r,pr);
 free(r);return(rep);
}

long galoisodd11(po,r,pr)
GEN po,*r;
long pr;
{
 long rep;
ODD_11_1:
 rep=isin_G_H(po,r,8,4,pr);
 if(rep) goto ODD_11_2;else return 8;
ODD_11_2:
 rep=isin_G_H(po,r,4,2,pr);
 if(rep) return 2;else return 4;
}

long galoiseven11(po,r,pr)
GEN po,*r;
long pr;
{
 long rep;
EVEN_11_1:
 rep=isin_G_H(po,r,7,6,pr);
 if(rep) goto EVEN_11_2;else return 7;
EVEN_11_2:
 rep=isin_G_H(po,r,6,5,pr);
 if(rep) goto EVEN_11_3;else return 6;
EVEN_11_3:
 rep=isin_G_H(po,r,5,3,pr);
 if(rep) goto EVEN_11_4;else return 5;
EVEN_11_4:
 rep=isin_G_H(po,r,3,1,pr);
 if(rep) return 1; else return 3;
}

PERMUTATION data11(n1,n2,t)
long n1,n2;
GROUP *t;
{
 char sid[N+1];
 long i,nbgr;
 PERMUTATION s;

 sid[0]=N;for(i=1;i<=N;i++) sid[i]=i;s=(char*)malloc(N+1);s[0]=N;
 switch(n1)
 {
  case 5:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
   s[1]=1;s[2]=2;s[3]=3;s[4]=7;s[5]=8;s[6]=6;s[7]=11;s[8]=5;s[9]=9;s[10]=4;s[11]=10;
   break;
  case 6:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);
   s[1]=1;s[2]=2;s[3]=3;s[4]=4;s[5]=6;s[6]=10;s[7]=11;s[8]=9;s[9]=7;s[10]=5;s[11]=8;
   break;
  case 7:nbgr=2;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);
   (*t)[2][1]=1;(*t)[2][2]=2;(*t)[2][3]=3;(*t)[2][4]=4;(*t)[2][5]=5;(*t)[2][6]=6;
   (*t)[2][7]=7;(*t)[2][8]=8;(*t)[2][9]=9;(*t)[2][10]=11;(*t)[2][11]=10;break;
  default:nbgr=1;*t=allocgroup(N,nbgr);permaff(sid,(*t)[1]);permaff(sid,s);break;
 }
 return s;
}

long galoismodulo11(pol,car)
GEN pol;
long car;
{
 long i,j,k,av,av1,nbgroup,nb,numer,p,fl,lp1,typ[N+1];
 byteptr d;
 GEN ff,p1,p2;
 
 TYPIMPAIR11[1][1]=11;TYPIMPAIR11[1][2]=0;TYPIMPAIR11[1][3]=0;TYPIMPAIR11[1][4]=0;
 TYPIMPAIR11[1][5]=0;TYPIMPAIR11[1][6]=0;TYPIMPAIR11[1][7]=0;TYPIMPAIR11[1][8]=0;
 TYPIMPAIR11[1][9]=0;TYPIMPAIR11[1][10]=0;TYPIMPAIR11[1][11]=0;
 TYPIMPAIR11[2][1]=10;TYPIMPAIR11[2][2]=1;TYPIMPAIR11[2][3]=0;TYPIMPAIR11[2][4]=0;
 TYPIMPAIR11[2][5]=0;TYPIMPAIR11[2][6]=0;TYPIMPAIR11[2][7]=0;TYPIMPAIR11[2][8]=0;
 TYPIMPAIR11[2][9]=0;TYPIMPAIR11[2][10]=0;TYPIMPAIR11[2][11]=0;
 TYPIMPAIR11[3][1]=5;TYPIMPAIR11[3][2]=5;TYPIMPAIR11[3][3]=1;TYPIMPAIR11[3][4]=0;
 TYPIMPAIR11[3][5]=0;TYPIMPAIR11[3][6]=0;TYPIMPAIR11[3][7]=0;TYPIMPAIR11[3][8]=0;
 TYPIMPAIR11[3][9]=0;TYPIMPAIR11[3][10]=0;TYPIMPAIR11[3][11]=0;
 TYPIMPAIR11[4][1]=2;TYPIMPAIR11[4][2]=2;TYPIMPAIR11[4][3]=2;TYPIMPAIR11[4][4]=2;
 TYPIMPAIR11[4][5]=2;TYPIMPAIR11[4][6]=1;TYPIMPAIR11[4][7]=0;TYPIMPAIR11[4][8]=0;
 TYPIMPAIR11[4][9]=0;TYPIMPAIR11[4][10]=0;TYPIMPAIR11[4][11]=0;
 TYPIMPAIR11[5][1]=1;TYPIMPAIR11[5][2]=1;TYPIMPAIR11[5][3]=1;TYPIMPAIR11[5][4]=1;
 TYPIMPAIR11[5][5]=1;TYPIMPAIR11[5][6]=1;TYPIMPAIR11[5][7]=1;TYPIMPAIR11[5][8]=1;
 TYPIMPAIR11[5][9]=1;TYPIMPAIR11[5][10]=1;TYPIMPAIR11[5][11]=1;
 
 TYPPAIR11[1][1]=11;TYPPAIR11[1][2]=0;TYPPAIR11[1][3]=0;TYPPAIR11[1][4]=0;
 TYPPAIR11[1][5]=0;TYPPAIR11[1][6]=0;TYPPAIR11[1][7]=0;TYPPAIR11[1][8]=0;
 TYPPAIR11[1][9]=0;TYPPAIR11[1][10]=0;TYPPAIR11[1][11]=0;
 TYPPAIR11[2][1]=8;TYPPAIR11[2][2]=2;TYPPAIR11[2][3]=1;TYPPAIR11[2][4]=0;
 TYPPAIR11[2][5]=0;TYPPAIR11[2][6]=0;TYPPAIR11[2][7]=0;TYPPAIR11[2][8]=0;
 TYPPAIR11[2][9]=0;TYPPAIR11[2][10]=0;TYPPAIR11[2][11]=0;
 TYPPAIR11[3][1]=6;TYPPAIR11[3][2]=3;TYPPAIR11[3][3]=2;TYPPAIR11[3][4]=0;
 TYPPAIR11[3][5]=0;TYPPAIR11[3][6]=0;TYPPAIR11[3][7]=0;TYPPAIR11[3][8]=0;
 TYPPAIR11[3][9]=0;TYPPAIR11[3][10]=0;TYPPAIR11[3][11]=0;
 TYPPAIR11[4][1]=5;TYPPAIR11[4][2]=5;TYPPAIR11[4][3]=1;TYPPAIR11[4][4]=0;
 TYPPAIR11[4][5]=0;TYPPAIR11[4][6]=0;TYPPAIR11[4][7]=0;TYPPAIR11[4][8]=0;
 TYPPAIR11[4][9]=0;TYPPAIR11[4][10]=0;TYPPAIR11[4][11]=0;
 TYPPAIR11[5][1]=4;TYPPAIR11[5][2]=4;TYPPAIR11[5][3]=1;TYPPAIR11[5][4]=1;
 TYPPAIR11[5][5]=1;TYPPAIR11[5][6]=0;TYPPAIR11[5][7]=0;TYPPAIR11[5][8]=0;
 TYPPAIR11[5][9]=0;TYPPAIR11[5][10]=0;TYPPAIR11[5][11]=0;
 TYPPAIR11[6][1]=3;TYPPAIR11[6][2]=3;TYPPAIR11[6][3]=3;TYPPAIR11[6][4]=1;
 TYPPAIR11[6][5]=1;TYPPAIR11[6][6]=0;TYPPAIR11[6][7]=0;TYPPAIR11[6][8]=0;
 TYPPAIR11[6][9]=0;TYPPAIR11[6][10]=0;TYPPAIR11[6][11]=0;
 TYPPAIR11[7][1]=2;TYPPAIR11[7][2]=2;TYPPAIR11[7][3]=2;TYPPAIR11[7][4]=2;
 TYPPAIR11[7][5]=1;TYPPAIR11[7][6]=1;TYPPAIR11[7][7]=1;TYPPAIR11[7][8]=0;
 TYPPAIR11[7][9]=0;TYPPAIR11[7][10]=0;TYPPAIR11[7][11]=0;
 TYPPAIR11[8][1]=1;TYPPAIR11[8][2]=1;TYPPAIR11[8][3]=1;TYPPAIR11[8][4]=1;
 TYPPAIR11[8][5]=1;TYPPAIR11[8][6]=1;TYPPAIR11[8][7]=1;TYPPAIR11[8][8]=1;
 TYPPAIR11[8][9]=1;TYPPAIR11[8][10]=1;TYPPAIR11[8][11]=1;
 
 for(i=1;i<6;i++) GROUPPAIR11[i]=1;for(i=1;i<4;i++) GROUPIMPAIR11[i]=1;
 av=avma;
 if(car)
 {
  nbgroup=5;k=1;d=diffptr;p= *d;
  while(k<12)
  {
   av1=avma;ff=simplefactmod(pol,stoi(p));p1=(GEN)ff[1];p2=(GEN)ff[2];
   lp1=lg(p1);fl=i=1;
   while(fl&&(i<lp1)){if(itos((GEN)(p2[i]))==1) i++;else fl=0;}
   if(i>=lp1)
   {
    for(j=1;j<lp1;j++) typ[j]=itos((GEN)(p1[lp1-j]));
    for(j=lp1;j<=N;j++) typ[j]=0;ranger(typ,N);numer=numeropair11(typ);
    if(!numer){avma=av;return 1;}
    else
    {nb=rayergrouppair11(numer);nbgroup=nbgroup-nb;if(nbgroup==1){avma=av;return 1;}}
   }
   avma=av1;k++;p=p+(*(++d));
  }
  if(nbgroup>1){avma=av;return 0;}
 }
 else
 {
  nbgroup=3;k=1;d=diffptr;p= *d;
  while(k<12)
  {
   av1=avma;ff=simplefactmod(pol,stoi(p));p1=(GEN)ff[1];p2=(GEN)ff[2];
   lp1=lg(p1);fl=i=1;
   while(fl&&(i<lp1)){if(itos((GEN)(p2[i]))==1) i++;else fl=0;}
   if(i>=lp1)
   {
    for(j=1;j<lp1;j++) typ[j]=itos((GEN)(p1[lp1-j]));
    for(j=lp1;j<=N;j++) typ[j]=0;ranger(typ,N);numer=numeroimpair11(typ);
    if(!numer){avma=av;return 1;}
    else
    {
     nb=rayergroupimpair11(numer);nbgroup=nbgroup-nb;
     if(nbgroup==1){avma=av;return 1;}
    }
   }
   avma=av1;k++;p=p+(*(++d));
  }
  if(nbgroup>1){avma=av;return 0;}
 }
}

long rayergrouppair11(num)
long num;
{
 long r;
 r=0;
 if(num==2)
 {
  if(GROUPPAIR11[1]){GROUPPAIR11[1]=0;r++;}if(GROUPPAIR11[2]){GROUPPAIR11[2]=0;r++;}
  if(GROUPPAIR11[3]){GROUPPAIR11[3]=0;r++;}
 }
 else if(num==3)
 {
  if(GROUPPAIR11[1]){GROUPPAIR11[1]=0;r++;}if(GROUPPAIR11[2]){GROUPPAIR11[2]=0;r++;}
  if(GROUPPAIR11[3]){GROUPPAIR11[3]=0;r++;}
 }
 else if(num==4){if(GROUPPAIR11[1]){GROUPPAIR11[1]=0;r++;}}
 else if(num==5)
 {
  if(GROUPPAIR11[1]){GROUPPAIR11[1]=0;r++;}if(GROUPPAIR11[2]){GROUPPAIR11[2]=0;r++;}
  if(GROUPPAIR11[3]){GROUPPAIR11[3]=0;r++;}
 }
 else if(num==6)
 {if(GROUPPAIR11[1]){GROUPPAIR11[1]=0;r++;}if(GROUPPAIR11[2]){GROUPPAIR11[2]=0;r++;}}
 else if(num==7)
 {if(GROUPPAIR11[1]){GROUPPAIR11[1]=0;r++;}if(GROUPPAIR11[2]){GROUPPAIR11[2]=0;r++;}}
 return r;
}

long rayergroupimpair11(num)
long num;
{
 long r;
 r=0;if(num==2){if(GROUPIMPAIR11[1]){GROUPIMPAIR11[1]=0;r++;}}
 else if(num==3){if(GROUPIMPAIR11[1]){GROUPIMPAIR11[1]=0;r++;}}return r;
}

long numeropair11(typ) /* 0 si typ n'est pas un des TYPPAIR11[i],i si typ=TYPPAIR11[i] */
long *typ;
{
 long i,fl;
 fl=i=1;while(fl&&(i<=8)){fl=compareupletlong(typ,TYPPAIR11[i],N);i++;}
 if(fl) return 0;else return(i-1);
}

long numeroimpair11(typ) 
long *typ;    /* 0 si typ n'est pas un des TYPIMPAIR11[i],i si typ=TYPIMPAIR11[i] */
{
 long i,fl;
 fl=i=1;while(fl&&(i<=5)){fl=compareupletlong(typ,TYPIMPAIR11[i],N);i++;}
 if(fl) return 0;else return(i-1);
}
