typedef signed long long int int64;
typedef unsigned long long int int64u;
long int a3=0,b_hi,c_hi,temp2=0;
int64u tempu;
unsigned long a2=0,a1=0,a0=0,b_lo=89,c_lo=89;
int64 temp,tempt;
tempu=(b_lo)*(c_lo);// b_lo*c_lo
a0=tempu;
a1=tempu<<32;
unsigned long int t=tempu;
//a0=64*64;
temp=(b_lo)*(c_hi); //b_lo*c_hi
a1=(a1)+(temp); //res a3,a2,a1,a0 a1+temp_lo
a2=a2+temp<<32; //a2=temp_hi
temp=(b_hi)*(c_lo);//b_hi *c_lo
a3=a3+temp<<32; //a2=a2+temp_hi
a1=a1+temp; //a1=a1+temp_lo
temp2=a2;//b_low=a2;
a2=a2+a3;//a2=a2+a3
a3=temp2+a3;//a3=b_low+a3
temp=(b_hi)*(c_hi);//b_hi*c*hi
a2=a2+temp;// a2=a2+temp_lo
a3=temp<<32+a3;//a3=temp_hi+a3
printf ("The result is :=%lld%lld%lld%lld\n",a3,a2,a1,a0);