function out= Matrix2Structure(P0,P1,nodi)
global Stati
DeltaP=P1-P0; % matrce che contiene la differenza delle probabilita' dopo il Barm

% Pdiag=P1-diag(diag(P1));
% Pdiag=normalizzaCol(Pdiag')';

for i=1:length(P0)
    appi=nodi(i);
     appi2=nodi(i);
     somma=sum(appi2.out_peso)+sum((appi2.in_tempo).*(appi2.in_peso));
     
    for j=1:length(P0)
                    
        if i==j
            % autoanello
            
            %appi.in_tempo=appi.in_tempo+(appi.in_tempo/P0(i,j))*(DeltaP(i,j));
            
           
        else
            %resto
            
            
            
            
            
            if DeltaP(i,j)~=0 && isnan(DeltaP(i,j))==0
               appj=nodi(j);
               [righe col]=find(appi.inout == j);
               j
               righe
              if isempty(righe)==0
               col=col;
               righe=righe(1);
               
              col1=find(appi.out == j);
              col1=col1(1);
               
               appi.out_peso(col1)=somma*P1(i,j);
               
               
               
               
               % prendo la matrice dei pesi di inout relativa allo stato i
               % di questa prendo la riga relativa all'uscita j 
               %  DeltaP(i,j)*sum(sum(appi.inoutPeso)) ==> calcola quanti
               % "passaggi" devo aggiungere o togliere
               
               %/sum(appi.inoutPeso(righe,:)); ==> li divide per le volte
               %che dallo stato i vado allo stato j
               
               %appi.inoutPeso(righe,:)* ==> li pesa per i vari ingressi
               % 1e-100 lo metto per evitare i NaN probabilmente si può togliere, ma non ho verificato. 
              
               % appi.inoutPeso(righe,:)= appi.inoutPeso(righe,:)+(appi.inoutPeso(righe,:)+1e-6)* DeltaP(i,j)/(P0(i,j));
               
               % appi.inoutPeso(righe,:)= appi2.inoutPeso(righe,:)+((sum(appi2.out_peso)+sum((appi2.in_tempo).*(appi2.in_peso)))* DeltaP(i,j));
%                
               
               
               if sum(appi.inoutPeso(righe,:)) ~=0
                 
                   appi.inoutPeso(righe,:)= appi2.inoutPeso(righe,:)*appi.out_peso(col1)/(appi2.out_peso(col1)+1e-100);
                   
                   %appi.inoutPeso(righe,:)= appi2.inoutPeso(righe,:)*P1(i,j)/P0(i,j);
               else
                   appi.inoutPeso(righe,:)= appi2.inoutPeso(righe,:)*appi.out_peso(col1)/(appi2.out_peso(col1)+1e-100);
                   
                   
                   %appi.inoutPeso(righe,:)= appi2.inoutPeso(righe,:)+((sum(appi2.out_peso)+sum((appi2.in_tempo).*(appi2.in_peso)))*DeltaP(i,j));
               end
               
               
%               appi.inoutPeso(righe,:)=appi.inoutPeso(righe,:)+appi.inoutPeso(righe,:)*DeltaP(i,j);


                col=find(appj.in == i);
              col=col(1);
              
               
              col1=find(appi.out == j);
              col1=col1(1);
              
              %appi.out_peso(col1)=sum(appi.inoutPeso(righe,:));
             
               
             
              
               appj.in_peso(col)=appi.out_peso(col1);
              
            Stati(j)=appj;
           % nodi(j)=appj;
          end
         
         end
         end                
    end
    Stati(i)=appi;
    %nodi(i)=appi;
    
end
out=1;