module top
(
 input x,
 input [2:0] y,
 input [2:0] cin,

 output A,
 output cout,
 output control
 );

 wire A1,cout1;
 wire [2:0] n_y;

 wire [2:0] n_cin;

//  initial begin
//     A = 0;
//     cout = 0;
//  end

assign n_y[0] = ~y[0];
assign n_y[1] = y[1];
assign n_y[2] = ~y[2];

assign n_cin[0] = ~cin[0];
assign n_cin[1] = cin[1];
assign n_cin[2] = ~cin[2];

`ifndef BUG
assign A1 =  n_y + &(~cin);
assign cout1 = cin ? |n_y : ^A;

assign A =  A1|y~&(~cin)~^A1;
assign cout =  cout1&cin~|(~y);

assign control = x & y & cin;
`else
assign A1 =  n_y + &(cin);
assign cout1 = cin ? |n_y : ^A;

assign A =  A1|y~&(~cin)~^A1;
assign cout =  cout1&cin~|(~y);

assign control = x | y | cin;
`endif

endmodule