#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define READ_SIZE 1000
void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult)
{
int len1 = 0;
int len2 = 0;
int lenSmall = 0;
int lenBig = 0;
int big = 0;
int add = 0;
int aug = 0;
int result = 0;
int carry = 0;
int i = 0;
char * pcResult = pcAddResult ;
len1 = strlen(pcAddend);
len2 = strlen(pcAugend);
if(len1>len2)
{
lenSmall=len2;
lenBig = len1;
big = 1;
}
else
{
lenSmall=len1;
lenBig = len2;
big = 2;
}
memset(pcResult, '0', lenBig+1);
pcResult[lenBig+1] = 0;
for(i=0; i< lenSmall; i++)
{
add = pcAddend[len1 -1 -i] - '0';
aug = pcAugend[len2 -1 -i] - '0';
result = add + aug;
if(result >9)
{
carry =1;
result = result - 10;
}
else
{
carry = 0;
result = result;
}
pcResult[lenBig-i] += result ;
pcResult[lenBig - 1 - i] += carry;
}
for(i=lenSmall; i< lenBig; i++)
{
if(big == 1)
{
result = pcAddend[len1-1-i] - '0';
}
else
{
result = pcAugend[len2-1-i] - '0';
}
carry = 0;
result = result;
pcResult[lenBig-i] += result ;
pcResult[lenBig - 1 -i] += carry;
}
if(pcResult[0] == '0')
{
memmove(pcAddResult, pcResult+1, lenBig+1);
}
}
int main(int argc ,char *argv[])
{
char *pcAddResult = 0;
char * p1 ;
char * p2 ;
char buf[READ_SIZE];
int i = 0;
int j = 0;
int il = 0;
int zero = 0;
char *p[2];
char * temp = 0;
int temp_len = 0;
int times = 0;
char * linep = 0;
int linel = 0;
struct {
char * p;
int l;
} lineBuf;
lineBuf.p = 0;
lineBuf.l = 0;
//read a very long line
while(1)
{
fgets(buf, READ_SIZE, stdin);
il = strlen(buf);
if(buf[il-1] == '\n')
{
if(times == 0)
{
lineBuf.l = il + 1;
lineBuf.p = malloc(lineBuf.l);
strncpy(lineBuf.p, buf, il+1);
}
else
{
temp = lineBuf.p;
temp_len = lineBuf.l;
lineBuf.l = temp_len + il + 1;
lineBuf.p= malloc(lineBuf.l);
strncpy(lineBuf.p, temp, temp_len);
strncpy(lineBuf.p + temp_len, buf, il+1);
free(temp);
temp = 0;
}
//printf("a:times:%d, p:%s,l:%d\n", times, lineBuf.p, lineBuf.l);
break;
}
else
{
times ++;
//il = READ_SIZE - 1
// if buf is xxxx\0, il = 4
if(times == 1)
{
lineBuf.l= il * times;
lineBuf.p = malloc(lineBuf.l);
strncpy(lineBuf.p , buf, il );
}
else
{
temp = lineBuf.p;
temp_len = lineBuf.l;
lineBuf.l = il * times;
lineBuf.p = malloc(lineBuf.l);
strncpy(lineBuf.p, temp, temp_len);
strncpy(lineBuf.p + temp_len, buf, il);
free(temp);
temp = 0;
}
//printf("b:times:%d, p:%s,l:%d\n", times, lineBuf.p, lineBuf.l);
}
}
if(lineBuf.l < 3)
{
//printf("lineBUf.l<3:%d\n", lineBuf.l);
return 0;
}
//printf("p:%s, l:%d\n", lineBuf.p, lineBuf.l);
linep = lineBuf.p;
linel = lineBuf.l - 1;
for(i=0; i<linel; i++)
{
if(linep[i] >= '0' && linep[i] <= '9')
{}
else
{
linep[i] = 0;
}
}
if(linep[0] == '0' && linep[1] != 0)
{
linep[0] = 0;
}
for(i=0; i<linel -1;i++)
{
if(linep[i] == 0)
{
if(linep[i+1] == '0' && linep[i+2] != 0)
{
linep[i+1] = 0;
}
}
}
j = 0; zero = 1;
for(i=0; i<linel; i++)
{
if(linep[i] == 0)
{
zero = 1;
}
else
{
if(zero == 1)
{
p[j++] = linep+i;
zero = 0;
if(j >=2 )
break;
}
}
}
if(j < 1)
{
//printf("j<1:%d\n", j);
return 0;
}
//printf("p0:%s, p1:%s\n", p[0], p[1]);
pcAddResult = malloc(lineBuf.l);
memset(pcAddResult, 0, lineBuf.l);
AddLongInteger(p[0], p[1], pcAddResult);
printf("%s\n", pcAddResult);
free(pcAddResult);
free(lineBuf.p);
return 0;
}