#include <stdio.h>
 
volatile union{
    unsigned char Table_ALL[2][2];
	struct{
	    struct{
	        union {
	                unsigned char Byte ;
	                struct {
	                        unsigned char C1_1:1;
	                        unsigned char C1_2:1;
	                        unsigned char C1_3:1;
	                        unsigned char C1_4:1;
	                        unsigned char C1_5:1;
	                        unsigned char C1_6:1;
	                        unsigned char C1_7:1;
	                        unsigned char C1_8:1;
	                }BIT;
	        } S1_C1;
	 
	        union {
	                unsigned char Byte ;
	                struct {
	                        unsigned char C2_1:1;
	                        unsigned char C2_2:1;
	                        unsigned char C2_3:1;
	                        unsigned char C2_4:1;
	                        unsigned char C2_5:1;
	                        unsigned char C2_6:1;
	                        unsigned char C2_7:1;
	                        unsigned char C2_8:1;
	                }BIT;
	        } S1_C2;
	    }S1;
	    struct{
	        union {
	                unsigned char Byte ;
	                struct {
	                        unsigned char C1_1:1;
	                        unsigned char C1_2:1;
	                        unsigned char C1_3:1;
	                        unsigned char C1_4:1;
	                        unsigned char C1_5:1;
	                        unsigned char C1_6:1;
	                        unsigned char C1_7:1;
	                        unsigned char C1_8:1;
	                }BIT;
	        } S2_C1;
	 
	        union {
	                unsigned char Byte ;
	                struct {
	                        unsigned char C2_1:1;
	                        unsigned char C2_2:1;
	                        unsigned char C2_3:1;
	                        unsigned char C2_4:1;
	                        unsigned char C2_5:1;
	                        unsigned char C2_6:1;
	                        unsigned char C2_7:1;
	                        unsigned char C2_8:1;
	                }BIT;
	        } S2_C2;
	    }S2;
	}CS_ALL;
}Table;
 
 
int main(void) {
	// your code goes here
	printf("Table_ALL[0][0] = %d\n", Table.Table_ALL[0][0]);
	printf("Table_ALL[0][1] = %d\n", Table.Table_ALL[0][1]);
	printf("Table_ALL[1][0] = %d\n", Table.Table_ALL[1][0]);
	printf("Table_ALL[1][1] = %d\n\n", Table.Table_ALL[1][1]);
 
	printf("Write 1 to S1.S1_C1.Byte\n");
	printf("Write 2 to S1.S1_C2.Byte\n");
	printf("Write 3 to S2.S2_C1.Byte\n");
	printf("Write 4 to S2.S2_C2.Byte\n\n");

	Table.CS_ALL.S1.S1_C1.Byte = 1;
	Table.CS_ALL.S1.S1_C2.Byte = 2;
	Table.CS_ALL.S2.S2_C1.Byte = 3;
	Table.CS_ALL.S2.S2_C2.Byte = 4;

	printf("S1.S1_C1.Byte = %d\n", Table.CS_ALL.S1.S1_C1.Byte);
	printf("S1.S1_C2.Byte = %d\n", Table.CS_ALL.S1.S1_C2.Byte);
	printf("S2.S2_C1.Byte = %d\n", Table.CS_ALL.S2.S2_C1.Byte);
	printf("S2.S2_C2.Byte = %d\n\n", Table.CS_ALL.S2.S2_C2.Byte);
 
	printf("Table_ALL[0][0] = %d\n", Table.Table_ALL[0][0]);
	printf("Table_ALL[0][1] = %d\n", Table.Table_ALL[0][1]);
	printf("Table_ALL[1][0] = %d\n", Table.Table_ALL[1][0]);
	printf("Table_ALL[1][1] = %d\n\n", Table.Table_ALL[1][1]);
 
	printf("Write 5 to S1.S1_C1.Byte\n");
	printf("Write 6 to S1.S1_C2.Byte\n");
	printf("Write 7 to S2.S2_C1.Byte\n");
	printf("Write 8 to S2.S2_C2.Byte\n\n");

	Table.CS_ALL.S1.S1_C1.Byte = 5;
	Table.CS_ALL.S1.S1_C2.Byte = 6;
	Table.CS_ALL.S2.S2_C1.Byte = 7;
	Table.CS_ALL.S2.S2_C2.Byte = 8;

	printf("S1.S1_C1.Byte = %d\n", Table.CS_ALL.S1.S1_C1.Byte);
	printf("S1.S1_C2.Byte = %d\n", Table.CS_ALL.S1.S1_C2.Byte);
	printf("S2.S2_C1.Byte = %d\n", Table.CS_ALL.S2.S2_C1.Byte);
	printf("S2.S2_C2.Byte = %d\n\n", Table.CS_ALL.S2.S2_C2.Byte);
 
	printf("Table_ALL[0][0] = %d\n", Table.Table_ALL[0][0]);
	printf("Table_ALL[0][1] = %d\n", Table.Table_ALL[0][1]);
	printf("Table_ALL[1][0] = %d\n", Table.Table_ALL[1][0]);
	printf("Table_ALL[1][1] = %d\n\n", Table.Table_ALL[1][1]);
	return 0;
}