`timescale 1ns/1ns

module lca_4(
    input        [3:0]       A_in  ,
    input        [3:0]        B_in  ,
    input                   C_1   ,
 
     output     wire            CO    ,
    output   wire [3:0]        S
);
    wire [2:0] c2;
    assign c2[0]=(A_in[0]&B_in[0])|(B_in[0]&C_1)|(A_in[0]&C_1);
    assign c2[1]=(A_in[1]&B_in[1])|(B_in[1]&c2[0])|(A_in[1]&c2[0]);
    assign c2[2]=(A_in[2]&B_in[2])|(B_in[2]&c2[1])|(A_in[2]&c2[1]);
 
    assign S[3:1]=(A_in[3:1])^(B_in[3:1])^(c2[2:0]);
    assign S[0]=(A_in[0])^(B_in[0])^(C_1);
    assign CO=(A_in[3]&B_in[3])|(B_in[3]&c2[2])|(A_in[3]&c2[2]);
endmodule