function [p_u,p_d] =  CCCP(lamda , gama , pd , pu , noise_var , h_hat, h_u, h_d, h_ud )
% thic function runs for a specific m,n,k 
lamda_prim = h_hat / (h_hat*pd + noise_var^2) + lamda*(log(2));  

gama_prim = h_ud/(h_ud*pu + noise_var^2) + gama*log(2);

z1 = (h_u*h_d - h_hat*h_ud)/( (h_d*gama_prim - h_ud*lamda_prim)*noise_var^2 );

z2 = (h_u*h_d - h_hat*h_ud)/((h_u*lamda_prim - h_hat*gama_prim)*noise_var^2);

p1_prim = phi(gama_prim, h_ud, h_u, noise_var);

p2_prim = phi(lamda_prim, h_d, h_hat, noise_var);

p1_star = (noise_var^2* ( h_d*z1 - h_hat*z2 + h_hat - h_d  ))/(h_u*h_d - h_hat *h_ud);

p2_star = (noise_var^2* ( h_u*z2 - h_ud*z1 + h_ud - h_u  ))/(h_u*h_d - h_hat *h_ud);

if (z1 < 0 || z2 < 0 )

    if ( F( 0 ,p2_prim, h_ud , h_hat, h_u, h_d , lamda_prim, gama_prim  , noise_var ) >= F(p1_prim , 0 , h_ud , h_hat, h_u, h_d , lamda_prim, gama_prim  , noise_var) )
        p_u = 0; 
        p_d = p2_prim;
    else 
        p_u = p1_prim;
        p_d = 0 ; 
    end

else 
    
    if  (p1_star >= 0 )
        if (p2_star >= 0)
            p_u = p1_star;
            p_d = p2_star;
        else 
            p_u = p1_prim;
            p_d = 0;
        end
    else
        if (p2_star >= 0 )
            p_u = 0 ; 
            p_d =  p2_prim;
        else 
            p_u = 0;
            p_d = 0;
        end
    end 
end
