 /*Informacin sobre el ajuste que diverge. Ya no es til */
 int elem1, elem2;
 FotogramaN** fotos1, **fotos2;
 uint* puntosc;
 short* presentes, *presentes2;
 uint* unicos, *unicos2;
 uint nfc1,nfc2;
 FotogramaN* punf2;
 cont_general--;
 elem1=Registro[cont_general].elem1;
 elem2=Registro[cont_general].elem2;
 switch(idioma){
	 case 1:  fp<<"An error arose when trying to join"; break;
	 case 2:  fp<<" apparso un errore al tentare di unire"; break;
	 default:fp<<"Se produjo un error al intentar unir";
 }
 if(elem1<=0){switch(idioma){
	 case 1:  fp<<" the photograph "; break;
	 case 2:  fp<<" il fotogramma "; break;
	 default:fp<<" el fotograma ";
   }
   fp<<(punF+(-elem1))->nombre;
 }else{switch(idioma){
	 case 1:  fp<<"the model "; break;
	 case 2:  fp<<" il modello "; break;
	 default:fp<<" el modelo ";
   }fp<<elem1;
 }
 if(elem2<=0){switch(idioma){
	 case 1:  fp<<" and the photograph "; break;
	 case 2:  fp<<" al fotogramma "; break;
	 default:fp<<" al fotograma ";
   }
   fp<<(punF+(-elem2))->nombre;
 }else{switch(idioma){
	 case 1:  fp<<" and the model "; break;
	 case 2:  fp<<" al modello "; break;
	 default:fp<<" al modelo ";
   }fp<<elem2;
 }
 fp<<'.'<<endl;

 if(elem1<=0 && elem2<=0){fp.close(); goto lblfin;}
 if(elem2<=0){
	 elem2=-elem2;
	 im1=modelos._Myfirst+elem1;
	 if1=punF+elem2;
	 *im1=modcopia;
	 minm=fot_min[elem2];
	 maxm=fot_max[elem2];
	 kk=p_acum[elem2];
	 l=p_acum[elem2+1]-kk;
	 puntosc=new uint[l];
	 k=im1->fpuntos.size();
	 npc=0;
	 for(i=0;i<l;i++){
		 if(if1->puntos[i].bb!=3) continue;
		 k1=if1->puntos[i].n;
		 for(j=0;j<k;j++){
			 if(im1->fpuntos[j]==k1){
				 puntosc[npc]=p_en_f[kk+i];
				 npc++;
				 break;
		 }	 }
	 }

	 k=im1->centros.size();
	 presentes=new short[k];
	 unicos=new uint[k];
	 memset(unicos,-1,k*sizeof(uint));
	 nfc1=0;
	 for(i=0;i<k;i++){
		 ll=im1->centros[i].fot-punF;
		 if(fot_min[ll]>maxm || fot_max[ll]<minm){presentes[i]=0; continue;}
		 naux=0;
		 l=p_acum[ll];
		 ll=p_acum[ll+1];
		 nmax=0;
		 for(j=l;j<ll;j++){
			 naux=p_en_f[j];
			 for(it=0;it<npc;it++){
				 if(puntosc[it]==naux){
					 nmax++;
					 break;
			 }	}
			 if(nmax==1) unicos[i]=naux;
			 if(nmax==2){
				 unicos[i]=-1;
				 break;
			 }
		 }
		 presentes[i]=nmax;
		 if(nmax) nfc1++;
	 }
	 fotos1=new FotogramaN*[nfc1];
	 for(i=0,l=0;i<k;i++){
		 if(presentes[i]){
			 fotos1[l]=im1->centros[i].fot;
			 l++;
		 }
	 }
	 switch(idioma){
		 case 1:  fp<<"The photographs from the model "<<elem1<<" that share some points with the photograph "<<(punF+elem2)->nombre<<" are the following ones:\n"; break;
		 case 2:  fp<<"I fotogrammi del modello "<<elem1<<" che hanno qualche punti in comune con il fotogramma "<<(punF+elem2)->nombre<<" sono i seguenti\n"; break;
		 default:fp<<"Los fotogramas del modelo "<<elem1<<" que tienen algn punto en comn con el fotograma "<<(punF+elem2)->nombre<<" son los siguientes:\n";
	 }
	 fp<<endl;
	 for(i=0;i<nfc1;i++)
		 fp<<"  "<<fotos1[i]->nombre;
	 fp<<endl;
	 fp.close();
	 delete[] fotos1;
	 delete[] unicos;
	 delete[] presentes;
	 delete[] puntosc;
 }else{
	 im1=modelos._Myfirst+elem1;
	 im2=modelos._Myfirst+elem2;
	 *im1=modcopia;
	 *im2=modcopia2;
	 k=im1->fpuntos.size();
	 kk=im2->fpuntos.size();
	 minm=mod_min[m1];
	 if(mod_min[m2]>minm) minm=mod_min[m2];
	 maxm=mod_max[m1];
	 if(mod_max[m2]<maxm) maxm=mod_max[m2];
	 puntosc=new uint[kk];
	 npc=0;
	 for(j=0;j<kk;j++){
		k1=im2->fpuntos[j];
		for(i=0;i<k;i++){
			if(im1->fpuntos[i]==k1){
				 puntosc[npc]=j;
				 npc++;
				 break;
		 }	 }
	 }
	 k=im1->centros.size();
	 kk=im2->centros.size();
	 presentes=new short[k];
	 unicos=new uint[k];
	 presentes2=new short[kk];
	 unicos2=new uint[kk];
	 memset(unicos,-1,k*sizeof(uint));
	 memset(unicos2,-1,kk*sizeof(uint));
	 //Fotogramas del primer modelo
	 nfc1=0;
	 for(i=0;i<k;i++){
		 punf2=im1->centros[i].fot;
		 ll=punf2-punF;
		 if(fot_min[ll]>maxm || fot_max[ll]<minm){presentes[i]=0; continue;}
		 naux=0;
		 l=punf2->puntos.size();
		 nmax=0;
		 for(j=0;j<l;j++){
			 k1=punf2->puntos[j].n;
			 for(it=0;it<npc;it++){
				 if(im2->fpuntos[puntosc[it]]==k1){
					 nmax++;
					 break;
			 }	}
			 if(nmax==1) unicos[i]=it;
			 if(nmax==2){
				 unicos[i]=-1;
				 break;
			 }
		 }
		 presentes[i]=nmax;
		 if(nmax) nfc1++;
	 }
	 fotos1=new FotogramaN*[nfc1];
	 for(i=0,l=0;i<k;i++){
		 if(presentes[i]){
			 fotos1[l]=im1->centros[i].fot;
			 l++;
		 }
	 }
	 //Segundo modelo
	 nfc2=0;
	 for(i=0;i<kk;i++){
		 punf2=im2->centros[i].fot;
		 ll=punf2-punF;
		 if(fot_min[ll]>maxm || fot_max[ll]<minm){presentes2[i]=0; continue;}
		 naux=0;
		 l=punf2->puntos.size();
		 nmax=0;
		 for(j=0;j<l;j++){
			 k1=punf2->puntos[j].n;
			 for(it=0;it<npc;it++){
				 if(im2->fpuntos[puntosc[it]]==k1){
					 nmax++;
					 break;
			 }	}
			 if(nmax==1) unicos2[i]=it;
			 if(nmax==2){
				 unicos2[i]=-1;
				 break;
			 }
		 }
		 presentes2[i]=nmax;
		 if(nmax) nfc2++;
	 }
	 fotos2=new FotogramaN*[nfc2];
	 for(i=0,l=0;i<kk;i++){
		 if(presentes2[i]){
			 fotos2[l]=im2->centros[i].fot;
			 l++;
		 }
	 }
	 switch(idioma){
		 case 1:  fp<<"The photographs from each model that share some points with the other model are the following ones:\n"; break;
		 case 2:  fp<<"I fotogrammi di ogni modello che hanno qualche punti in comune con l'altro modello sono i seguenti\n"; break;
		 default:fp<<"Los fotogramas de cada modelo que tienen algn punto en comn con el otro modelo son los siguientes:\n";
	 }
	 fp<<endl;
	 fp<<"  m "<<elem1<<':';
	 for(i=0;i<nfc1;i++) fp<<"  "<<fotos1[i]->nombre;
	 fp<<'\n'; fp<<endl;
	  fp<<"  m "<<elem2<<':';
	 for(i=0;i<nfc2;i++) fp<<"  "<<fotos2[i]->nombre;
	 fp<<'\n'<<endl;
	 switch(idioma){
		 case 1:  fp<<"And the common points are:\n"; break;
		 case 2:  fp<<"E i punti comuni sono:\n"; break;
		 default:fp<<"Y los puntos comunes son:\n";
	 }
	 fp<<endl;
	 for(i=0;i<npc;i++){
		 fp<<"  "<<puntos[im2->fpuntos[puntosc[i]]];
	 }fp<<endl;
	 fp.close();
	 delete[] fotos2;
	 delete[] fotos1;
	 delete[] unicos2;
	 delete[] presentes2;
	 delete[] unicos;
	 delete[] presentes;
	 delete[] puntosc;
 }