#include <stdio.h>
#include <stdint.h>
unsigned long long divisors[] = {
1000000000,
1000000000,
1000000000,
1000000000,
100000000,
100000000,
100000000,
10000000,
10000000,
10000000,
1000000,
1000000,
1000000,
1000000,
100000,
100000,
100000,
10000,
10000,
10000,
1000,
1000,
1000,
1000,
100,
100,
100,
10,
10,
10,
1,
1,
1
};
int main()
{
unsigned long long int i, j, res;
unsigned char inbuff[2500000]; /* To be certain there's no overflow here */
unsigned char *in = inbuff;
char outbuff[2500000]; /* To be certain there's no overflow here */
char *out = outbuff;
int c = 0;
while(1) {
i = j = 0;
inbuff
[fread(inbuff
, 1, 2500000, stdin
)] = '\0';
/* Skip whitespace before first number and check if end of input */
do {
c = *(in++);
} while(c != '\0' && !(c >= '0' && c <= '9'));
/* If end of input, print answer and return */
if(c == '\0') {
*(--out) = '\0';
return 0;
}
/* Read first integer */
do {
i = 10 * i + (c - '0');
c = *(in++);
} while(c >= '0' && c <= '9');
/* Skip whitespace between first and second integer */
do {
c = *(in++);
} while(!(c >= '0' && c <= '9'));
/* Read second integer */
do {
j = 10 * j + (c - '0');
c = *(in++);
} while(c >= '0' && c <= '9');
if(i > j)
res = i-j;
else
res = j-i;
/* Buffer answer */
if(res == 0) {
*(out++) = '0';
} else {
unsigned long long divisor = divisors[__builtin_clzll(res)-31];
/* Skip trailing 0 */
if(res < divisor) {
divisor /= 10;
}
/* Buffer digits */
while(divisor != 0) {
unsigned long long digit = res / divisor;
*(out++) = digit + '0';
res -= divisor * digit;
divisor /= 10;
}
}
*(out++) = '\n';
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCnVuc2lnbmVkIGxvbmcgbG9uZyBkaXZpc29yc1tdID0gewogIDEwMDAwMDAwMDAsCiAgMTAwMDAwMDAwMCwKICAxMDAwMDAwMDAwLAogIDEwMDAwMDAwMDAsCiAgMTAwMDAwMDAwLAogIDEwMDAwMDAwMCwKICAxMDAwMDAwMDAsCiAgMTAwMDAwMDAsCiAgMTAwMDAwMDAsCiAgMTAwMDAwMDAsCiAgMTAwMDAwMCwKICAxMDAwMDAwLAogIDEwMDAwMDAsCiAgMTAwMDAwMCwKICAxMDAwMDAsCiAgMTAwMDAwLAogIDEwMDAwMCwKICAxMDAwMCwKICAxMDAwMCwKICAxMDAwMCwKICAxMDAwLAogIDEwMDAsCiAgMTAwMCwKICAxMDAwLAogIDEwMCwKICAxMDAsCiAgMTAwLAogIDEwLAogIDEwLAogIDEwLAogIDEsCiAgMSwKICAxCn07CiAgCgppbnQgbWFpbigpCnsKICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IGksIGosIHJlczsKICAKICB1bnNpZ25lZCBjaGFyIGluYnVmZlsyNTAwMDAwXTsgLyogVG8gYmUgY2VydGFpbiB0aGVyZSdzIG5vIG92ZXJmbG93IGhlcmUgKi8KICB1bnNpZ25lZCBjaGFyICppbiA9IGluYnVmZjsKICBjaGFyIG91dGJ1ZmZbMjUwMDAwMF07IC8qIFRvIGJlIGNlcnRhaW4gdGhlcmUncyBubyBvdmVyZmxvdyBoZXJlICovCiAgY2hhciAqb3V0ID0gb3V0YnVmZjsKICAKICBpbnQgYyA9IDA7CiAgCiAgd2hpbGUoMSkgewogICAgaSA9IGogPSAwOwogICAgCiAgICBpbmJ1ZmZbZnJlYWQoaW5idWZmLCAxLCAyNTAwMDAwLCBzdGRpbildID0gJ1wwJzsKICAgIAogICAgLyogU2tpcCB3aGl0ZXNwYWNlIGJlZm9yZSBmaXJzdCBudW1iZXIgYW5kIGNoZWNrIGlmIGVuZCBvZiBpbnB1dCAqLwogICAgZG8gewogICAgICBjID0gKihpbisrKTsKICAgIH0gd2hpbGUoYyAhPSAnXDAnICYmICEoYyA+PSAnMCcgJiYgYyA8PSAnOScpKTsKICAgIAogICAgLyogSWYgZW5kIG9mIGlucHV0LCBwcmludCBhbnN3ZXIgYW5kIHJldHVybiAqLwogICAgaWYoYyA9PSAnXDAnKSB7CiAgICAgICooLS1vdXQpID0gJ1wwJzsKICAgICAgcHV0cyhvdXRidWZmKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICAKICAgIC8qIFJlYWQgZmlyc3QgaW50ZWdlciAqLwogICAgZG8gewogICAgICBpID0gMTAgKiBpICsgKGMgLSAnMCcpOwogICAgICBjID0gKihpbisrKTsKICAgIH0gd2hpbGUoYyA+PSAnMCcgJiYgYyA8PSAnOScpOwogICAgCiAgICAvKiBTa2lwIHdoaXRlc3BhY2UgYmV0d2VlbiBmaXJzdCBhbmQgc2Vjb25kIGludGVnZXIgKi8KICAgIGRvIHsKICAgICAgYyA9ICooaW4rKyk7CiAgICB9IHdoaWxlKCEoYyA+PSAnMCcgJiYgYyA8PSAnOScpKTsKICAgIAogICAgLyogUmVhZCBzZWNvbmQgaW50ZWdlciAqLwogICAgZG8gewogICAgICBqID0gMTAgKiBqICsgKGMgLSAnMCcpOwogICAgICBjID0gKihpbisrKTsKICAgIH0gd2hpbGUoYyA+PSAnMCcgJiYgYyA8PSAnOScpOwogICAgCiAgICBpZihpID4gaikKICAgICAgcmVzID0gaS1qOwogICAgZWxzZQogICAgICByZXMgPSBqLWk7CiAgICAKICAgIAogICAgCiAgICAvKiBCdWZmZXIgYW5zd2VyICovCiAgICBpZihyZXMgPT0gMCkgewogICAgICAqKG91dCsrKSA9ICcwJzsKICAgIH0gZWxzZSB7CiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkaXZpc29yID0gZGl2aXNvcnNbX19idWlsdGluX2NsemxsKHJlcyktMzFdOwogICAgICAvKiBTa2lwIHRyYWlsaW5nIDAgKi8KICAgICAgaWYocmVzIDwgZGl2aXNvcikgewogICAgICAgIGRpdmlzb3IgLz0gMTA7CiAgICAgIH0KICAgICAgLyogQnVmZmVyIGRpZ2l0cyAqLwogICAgICB3aGlsZShkaXZpc29yICE9IDApIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGlnaXQgPSByZXMgLyBkaXZpc29yOwogICAgICAgICoob3V0KyspID0gZGlnaXQgKyAnMCc7CiAgICAgICAgcmVzIC09IGRpdmlzb3IgKiBkaWdpdDsKICAgICAgICBkaXZpc29yIC89IDEwOwogICAgICB9CiAgICB9CiAgICAqKG91dCsrKSA9ICdcbic7CiAgfQp9ICAg