Assign interface labels based on adjacent triangle regions

Maybe this is helpful for anyone:

int nn=6;
border C01(t=0, 1){x=t; y=0; label=4;}
border C02(t=0, 1){x=1; y=t; label=1;}
border C03(t=0, 1){x=1-t; y=1; label=1;}
border C04(t=0, 1){x=0; y=1-t; label=1;}
border C05(t=0, 1){x=1-t; y=0.5; label=1;}
border C06(t=0, 0.5){x=0.5; y=0.5+t; label=1;}
mesh Th=buildmesh(C01(nn)+C02(nn)+C03(nn)+C04(nn)+C05(nn)+C06(nn));
int[int,int] interfaceLabels = [[0,1,1],[0,3,2],[1,3,3]];
func int Mylab(int k, int nTri, int lab){
  if (nTri == 2)
  { // assign the label to the interface edges
	  int Edge = Th.be(k).whoinElement;           
	  int kk = int(Th.be(k).Element);       
	  int Adjacent = Th[kk].adj(Edge);
	  // cout << Th[kk].region << "   " << Th[Adjacent].region << endl;
	  for (int j=0;j<interfaceLabels.n;j++)
	  {
	  if ( (Th[kk].region == interfaceLabels(j,0) && Th[Adjacent].region == interfaceLabels(j,1) ) ||
	       (Th[kk].region == interfaceLabels(j,1) && Th[Adjacent].region == interfaceLabels(j,0) ) )
	       {   
	  	return interfaceLabels(j,2);
	  	break;
	  	}
	  }
	  return 0;
  }
  else  // leave the boundary labels unchanged
  return lab;
}

int jj=0; 
Th = change(Th, flabel=Mylab(jj++,nTonEdge,label));