static int hexdigit(char x)
{
if (x >= '0' && x <= '9') return x - '0';
if (x >= 'a' && x <= 'f') return 10 + (x - 'a');
if (x >= 'A' && x <= 'F') return 10 + (x - 'A');
return -1;
}
int hexparse(unsigned char *y,long long len,const char *x)
{
if (!x) return 0;
while (len > 0) {
int digit0;
int digit1;
digit0 = hexdigit(x[0]); if (digit0 == -1) return 0;
digit1 = hexdigit(x[1]); if (digit1 == -1) return 0;
*y++ = digit1 + 16 * digit0;
--len;
x += 2;
}
if (x[0]) return 0;
return 1;
}
char buf[256];
long long buflen = 0;
static void flush(void) {
if (writeall(1, buf, buflen) == -1) _exit(errno);
buflen = 0;
}
static void xeet(void) {
flush();
if (fsyncfd(1) == -1) _exit(errno);
_exit(0);
}
static void wrch(const char ch) {
if (buflen >= sizeof buf) flush();
buf[buflen++] = ch;
return;
}
char inbuf[128];
int main(int argc, char **argv) {
long long r, i;
for (;;) {
r = read(0, inbuf, sizeof inbuf);
if (r == -1) _exit(errno);
if (r == 0) break;
for (i = 0; i < r; ++i) {
wrch("0123456789abcdef"[15 & (inbuf[i] >> 4)]);
wrch("0123456789abcdef"[15 & inbuf[i]]);
}
}
wrch('\n');
xeet();
return 0;
}