From 62305e44c3eb8f360754f8f3162a7a18682a529d Mon Sep 17 00:00:00 2001 From: d0p1 Date: Thu, 25 Apr 2024 21:27:27 +0200 Subject: [PATCH] Wip VM --- doc/memory.org | 21 + vm/Makefile.am | 4 +- vm/ata/ata.c | 38 +- vm/ata/ata.h | 18 +- vm/ata/ethernet.c | 15 +- vm/ata/rtc.c | 32 +- vm/ata/serial.c | 24 +- vm/ata/vga.c | 22 - vm/bus.c | 12 +- vm/bus.h | 17 +- vm/cpu.c | 6 + vm/cpu.h | 5 + vm/main.c | 54 ++- vm/res/fonts.c | 1149 ++++++++++++++++++++++++++++++++++++++++++++ vm/res/fonts.png | Bin 0 -> 37955 bytes vm/video.h | 8 + vm/video/memory.c | 35 ++ vm/video/monitor.c | 53 ++ vm/vm.h | 17 - 19 files changed, 1392 insertions(+), 138 deletions(-) create mode 100644 doc/memory.org delete mode 100644 vm/ata/vga.c create mode 100644 vm/res/fonts.c create mode 100644 vm/res/fonts.png create mode 100644 vm/video.h create mode 100644 vm/video/memory.c create mode 100644 vm/video/monitor.c delete mode 100644 vm/vm.h diff --git a/doc/memory.org b/doc/memory.org new file mode 100644 index 0000000..1b27fc3 --- /dev/null +++ b/doc/memory.org @@ -0,0 +1,21 @@ + + +#+begin_src +0xFFFFFFFF +-----------------------+ + | isa mmio | +0xFFFFF000 +-----------------------+ + . . + . . + . . +0xFFFBFFFF +-----------------------+ + | video ram | +0xFFFB0000 +-----------------------+ + . . + . . + . . +0xFFF00000 +-----------------------+ + | ROM | + +-----------------------+ + | RAM | +0x00000000 +-----------------------+ +#+end_src diff --git a/vm/Makefile.am b/vm/Makefile.am index 910e88d..d7c292c 100644 --- a/vm/Makefile.am +++ b/vm/Makefile.am @@ -6,6 +6,6 @@ noinst_LIBRARIES = $(LIBJIT) $(LIB_ATA) bin_PROGRAMS = vm -vm_SOURCES = main.c +vm_SOURCES = main.c video/monitor.c vm_CFLAGS =-I$(top_srcdir) $(SDL2_CFLAGS) -vm_LDADD = ../lib/lib65oo2.a $(LIBJIT) $(LIB_ATA) $(RES) $(SDL2_LIBS) +vm_LDADD = ../lib/lib65oo2.a ../libutils/libutils.a $(LIBJIT) $(LIB_ATA) $(RES) $(SDL2_LIBS) diff --git a/vm/ata/ata.c b/vm/ata/ata.c index a0a9b1a..98dd2f6 100644 --- a/vm/ata/ata.c +++ b/vm/ata/ata.c @@ -1,27 +1,21 @@ #include "ata.h" #include "config.h" +#include "../bus.h" -extern AtaDevice rtc_dev; -#ifdef ATA_ETHERNET -extern AtaDevice ethernet_dev; -#endif /* ATA_ETHERNET */ -#ifdef ATA_VGA -extern AtaDevice vga_dev; -#endif /* ATA_VGA */ - - -AtaDevice *devices[] = { - &rtc_dev, -#ifdef ATA_ETHERNET - ðernet_dev, -#endif /* ATA_ETHERNET */ -#ifdef ATA_VGA - &vga_dev, -#endif /* ATA_VGA */ - NULL +static struct bus *devices = { + &rtc_device, + ðernet_device, + &serial3_device, + &serial2_device, + &serial1_device, + NULL, }; -void -ata_bus_initialize(void) -{ -} + +struct bus isa_bus = { + "isa-mmio", + {0xFFFFF000, UINT32_MAX}, + NULL, + NULL, + devices +}; \ No newline at end of file diff --git a/vm/ata/ata.h b/vm/ata/ata.h index 4858c94..39ae1bc 100644 --- a/vm/ata/ata.h +++ b/vm/ata/ata.h @@ -2,18 +2,12 @@ # define VM_ATA_ATA_H 1 # include +# include "../bus.h" -typedef void (*IoWrite)(uint8_t offset, uint8_t data); -typedef uint8_t (*IoRead)(uint8_t offset); - -typedef struct -{ - char const *name; - uint16_t start; - uint16_t end; - void *state; - IoWrite io_write; - IoRead io_read; -} AtaDevice; +extern struct bus rtc_device; +extern struct bus ethernet_device; +extern struct bus serial3_device; +extern struct bus serial2_device; +extern struct bus serial1_device; #endif /* VM_ATA_ATA_H */ diff --git a/vm/ata/ethernet.c b/vm/ata/ethernet.c index ce9bac5..3a9aebd 100644 --- a/vm/ata/ethernet.c +++ b/vm/ata/ethernet.c @@ -1,14 +1,13 @@ #include "ata.h" static const uint8_t mac_addr[6] = { - 0x53, 0x54, 0x41, 0x4C, 0x49, 0x4E + 0x53, 0x54, 0x41, 0x4C, 0x49, 0x4E }; -AtaDevice ethernet_dev = { - "TinyEthernet", - 0x360, - 0x36F, - NULL, - NULL, - NULL +struct bus ethernet_device = { + "ethernet-dev", + {0x360, 0x36F}, + NULL, + NULL, + NULL, }; diff --git a/vm/ata/rtc.c b/vm/ata/rtc.c index 1d49707..de80238 100644 --- a/vm/ata/rtc.c +++ b/vm/ata/rtc.c @@ -16,30 +16,30 @@ static uint8_t current_reg = 0x00; void rtc_write(uint8_t addr, uint8_t value) { - if (addr == 0) - { - current_reg = value; - } + if (addr == 0) + { + current_reg = value; + } } uint8_t rtc_read(uint8_t addr) { - time_t time; - struct tm tm; + time_t time; + struct tm tm; - localtime(&time); + localtime(&time); - (void)time; - (void)tm; + (void)time; + (void)tm; - return (0x00); + return (0x00); } -AtaDevice rtc_dev = { - "RTC", - 0x070, - 0x071, - NULL, - NULL +struct bus rtc_device = { + "rtc-dev", + {0x070, 0x071}, + NULL, + NULL, + NULL }; diff --git a/vm/ata/serial.c b/vm/ata/serial.c index 3bfee6c..b9d04a9 100644 --- a/vm/ata/serial.c +++ b/vm/ata/serial.c @@ -1,25 +1,25 @@ #include "ata.h" -AtaDevice com3_dev = { - "COM3", - 0x3E0, - 0x3EF, +struct bus serial3_device = { + "serial3-dev", + {0x3E0, 0x3EF}, + NULL, NULL, NULL }; -AtaDevice com2_dev = { - "COM2", - 0x2F8, - 0x2FF, +struct bus serial2_device = { + "serial2-dev", + {0x02F8, 0x2FF}, NULL, NULL, + NULL }; -AtaDevice com1_dev = { - "COM1", - 0x3F8, - 0x3FF, +struct bus serial1_device = { + "serial1-dev", + {0x3F8, 0x3FF}, NULL, NULL, + NULL }; diff --git a/vm/ata/vga.c b/vm/ata/vga.c deleted file mode 100644 index 258d1af..0000000 --- a/vm/ata/vga.c +++ /dev/null @@ -1,22 +0,0 @@ -#include "ata.h" - -enum VGA_REG { - REG_CRTC_ADDR, - REG_CRTC_DATA, - REG_INPUT_STATUS1, - REG_FEAT_CTRL, - REG_ATTR_ADDR, - REG_ATTR_DATA, -}; - -enum VGA_CRTC { - XXX -}; - -AtaDevice vga_dev = { - "TinyVGA", - 0x3C0, - 0x3CF, - NULL, - NULL, -}; diff --git a/vm/bus.c b/vm/bus.c index ce1a0d5..437c901 100644 --- a/vm/bus.c +++ b/vm/bus.c @@ -1,7 +1,6 @@ -void -bus_initialize(void) -{ -} + +#include +#include "bus.h" void bus_read(void) @@ -17,3 +16,8 @@ void bus_reset(void) { } + +struct bus mainbus = { + "mainbus", + {0x0, UINT32_MAX}, +}; \ No newline at end of file diff --git a/vm/bus.h b/vm/bus.h index 33ec96d..91d5599 100644 --- a/vm/bus.h +++ b/vm/bus.h @@ -7,10 +7,19 @@ typedef int (*BusRead)(uint32_t addr, void *data, size_t sz); typedef int (*BusWrite)(uint32_t addr, const void *data, size_t sz); -typedef struct -{ - BusRead read; - BusWrite write; +typedef struct { + uint32_t start; + uint32_t end; +} Range; + +typedef struct bus { + const char *name; + Range range; + + BusRead read; + BusWrite write; + + struct bus *sub[]; } Bus; #endif /* !VM_BUS_H */ \ No newline at end of file diff --git a/vm/cpu.c b/vm/cpu.c index a4b232e..2659e77 100644 --- a/vm/cpu.c +++ b/vm/cpu.c @@ -1,6 +1,12 @@ #include #include "cpu.h" +void +cpu_reset(Cpu *cpu) +{ + +} + void invalid_opcode(Cpu *cpu) { diff --git a/vm/cpu.h b/vm/cpu.h index a5b4887..a91b987 100644 --- a/vm/cpu.h +++ b/vm/cpu.h @@ -11,6 +11,11 @@ typedef struct uint32_t Y; uint8_t SR; uint32_t SP; + uint32_t CR0; + uint32_t CR1; + uint32_t CR2; } Cpu; +void cpu_reset(Cpu *cpu); + #endif /* !VM_CPU_H */ \ No newline at end of file diff --git a/vm/main.c b/vm/main.c index c586eac..ef4ac88 100644 --- a/vm/main.c +++ b/vm/main.c @@ -1,12 +1,38 @@ #include "config.h" #include #include -#ifdef HAVE_LIBGEN_H -# include -#endif /* HAVE_LIBGEN_H */ #include +#include "libutils/utils.h" +#include "video.h" -static const char *prg_name; +static int +vm_maim(void) +{ + SDL_Event event; + int run; + + if (SDL_Init(SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO) != 0) + { + fatal("SDL: %s", SDL_GetError()); + } + + monitor_setup(); + run = 1; + while (run) + { + while(SDL_PollEvent(&event)) + { + if(event.type == SDL_QUIT) + { + run = 0; + } + } + monitor_draw(); + } + monitor_cleanup(); + SDL_Quit(); + return (EXIT_SUCCESS); +} static void usage(int retcode) @@ -14,11 +40,11 @@ usage(int retcode) if (retcode == EXIT_FAILURE) { fprintf(stderr, - "Try '%s -h' for more information.\n", prg_name); + "Try '%s -h' for more information.\n", get_exec_name()); } else { - printf("Usage: %s [-hV] [-b bios]\n", prg_name); + printf("Usage: %s [-hV] [-b bios]\n", get_exec_name()); printf("\t-h\tdisplay this help and exit\n"); printf("\t-V\toutput version information\n"); printf("\nReport bugs to <%s>\n", PACKAGE_BUGREPORT); @@ -27,21 +53,10 @@ usage(int retcode) exit(retcode); } -static void -version(void) -{ - printf("%S version %s\n", PACKAGE_NAME, PACKAGE_VERSION); - exit(EXIT_SUCCESS); -} - int main(int argc, char **argv) { -#ifdef HAVE_LIBGEN_H - prg_name = basename(argv[0]); -#else - prg_name = argv[0]; -#endif /* HAVE_LIBGEN_H */ + set_exec_name(argv[0]); while ((argc > 1) && (argv[1][0] == '-')) { @@ -61,5 +76,6 @@ main(int argc, char **argv) argv++; argc--; } - return (EXIT_SUCCESS); + + return (vm_maim()); } diff --git a/vm/res/fonts.c b/vm/res/fonts.c new file mode 100644 index 0000000..60a1c1d --- /dev/null +++ b/vm/res/fonts.c @@ -0,0 +1,1149 @@ +/* GIMP RGBA C-Source image dump (fonts.c) */ + +static const struct { + guint width; + guint height; + guint bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */ + guint8 pixel_data[128 * 128 * 2 + 1]; +} fonts = { + 128, 128, 2, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000" + "\000\000\377\377\377\377\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377" + "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377" + "\377\000\000\377\377\377\377\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000\377\377\377\377\377\377\000\000" + "\377\377\377\377\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\377" + "\377\377\377\000\000\000\000\377\377\377\377\377\377\000\000\377\377\377\377\000\000\000\000" + "\377\377\377\377\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377" + "\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377" + "\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000" + "\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\377\377\000\000\377\377\377\377\377\377\377\377\000\000\377" + "\377\000\000\377\377\377\377\377\377\377\377\377\377\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\377" + "\377\377\377\377\377\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377" + "\377\377\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\000\000\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377" + "\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\377\377\000\000\377\377\377\377\377\377\377\377\000\000\377\377\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000" + "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\000\000\000\000" + "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000" + "\000\000\000\000\377\377\377\377\000\000\377\377\000\000\377\377\377\377\000\000\000\000\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000" + "\000\000\000\000\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\000\000\377" + "\377\377\377\000\000\000\000\377\377\377\377\000\000\377\377\000\000\000\000\377\377\377\377" + "\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\377\377\000\000\000\000\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377" + "\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377" + "\377\377\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\000\000\000\000\377\377\377\377\000\000\377\377\377\377\000\000\377\377\377\377" + "\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377\377\377\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377" + "\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377" + "\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000" + "\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000" + "\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000" + "\377\377\377\377\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\377\377\377\377\000\000\000\000\377\377\377\377" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377" + "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377" + "\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377" + "\377\000\000\000\000\377\377\377\377\377\377\000\000\377\377\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377" + "\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377" + "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377" + "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377" + "\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377" + "\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\377\377\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000" + "\377\377\377\377\000\000\000\000\000\000\377\377\377\377\000\000\377\377\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377" + "\377\377\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377" + "\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377" + "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\377\377\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377" + "\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377" + "\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377" + "\000\000\000\000\000\000\377\377\377\377\000\000\377\377\377\377\377\377\377\377\377\377" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\000\000\377\377\377\377\377\377\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\377\377" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\377\377\377\377\377\377\000\000\377\377\000\000\000\000\377\377\000\000\377" + "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\377\377" + "\377\377\000\000\000\000\377\377\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377" + "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\377\377\377" + "\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377" + "\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377" + "\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000" + "\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\000\000\377" + "\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\377\377\377\377\377\377\000\000\377\377\377\377\000\000\000\000\377\377\377" + "\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000" + "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\377\377\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377" + "\377\377\000\000\377\377\377\377\000\000\000\000\377\377\377\377\000\000\377\377\377\377" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377" + "\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377" + "\377\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\377\377\377\377\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377" + "\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377" + "\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377" + "\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377" + "\377\377\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377" + "\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\377\377\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\377\377\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377" + "\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\377\377\377\377\000\000\000\000\377\377\000\000\377\377\377\377\377\377\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\377\377\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377" + "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000" + "\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377\000\000\377\377" + "\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377\377\377" + "\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377" + "\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\377\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\377\377\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377" + "\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000" + "\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377" + "\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377" + "\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\377\377\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377" + "\377\377\377\000\000\377\377\000\000\000\000\377\377\377\377\377\377\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\377\377\000\000\377\377\377\377\377\377\000\000\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000" + "\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000" + "\000\000\377\377\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\377\377\377\377\377" + "\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000" + "\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377" + "\377\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377" + "\000\000\000\000\000\000\377\377\000\000\377\377\377\377\377\377\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377" + "\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000" + "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377" + "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000" + "\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377" + "\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\000\000\377\377\000\000\377\377\377\377\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\377\377\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\377\377\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377" + "\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377" + "\377\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377" + "\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\377\377\377\377\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000\377" + "\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377" + "\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\377\377\000\000\000\000" + "\000\000\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377" + "\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000" + "\377\377\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\377\377\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377" + "\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377\377\377\377" + "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377\000\000\377" + "\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\377\377\000\000\377\377\000\000" + "\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377" + "\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377" + "\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377" + "\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377" + "\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377" + "\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377" + "\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000" + "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377" + "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000" + "\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000" + "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000\377\377" + "\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377" + "\377\377\377\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377" + "\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377" + "\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377" + "\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000" + "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000" + "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377" + "\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377" + "\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000" + "\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000" + "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377" + "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\377\377\377\377\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", +}; + diff --git a/vm/res/fonts.png b/vm/res/fonts.png new file mode 100644 index 0000000000000000000000000000000000000000..b01db01634883774912e8b428e4240363043f44b GIT binary patch literal 37955 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 QM*si-07*qoM6N<$f-1{LH~;_u literal 0 HcmV?d00001 diff --git a/vm/video.h b/vm/video.h new file mode 100644 index 0000000..c987aff --- /dev/null +++ b/vm/video.h @@ -0,0 +1,8 @@ +#ifndef VM_VIDEO_H +# define VM_VIDEO_H 1 + +int monitor_setup(void); +void monitor_cleanup(void); +void monitor_draw(void); + +#endif /* !VM_VIDEO_H */ \ No newline at end of file diff --git a/vm/video/memory.c b/vm/video/memory.c new file mode 100644 index 0000000..3c963f4 --- /dev/null +++ b/vm/video/memory.c @@ -0,0 +1,35 @@ +#include +#include +#include +#include "../bus.h" + +#define VIDEO_BASE_ADDR 0xFFFB8000 + +static uint16_t memory[320*200]; + +static int +read(uint32_t addr, void *data, size_t sz) +{ + addr = addr - VIDEO_BASE_ADDR; + + memcpy(data, ((uint8_t *)memory) + addr, sz); + + return (sz); +} + +static int +write(uint32_t addr, const void *data, size_t sz) +{ + addr = addr - VIDEO_BASE_ADDR; + + memcpy(((uint8_t *)memory) + addr, data, sz); + + return (sz); +} + +struct bus video_memory = { + "video-memory", + {VIDEO_BASE_ADDR, VIDEO_BASE_ADDR + (320 * 200 * sizeof(uint16_t))}, + &read, + &write, +}; diff --git a/vm/video/monitor.c b/vm/video/monitor.c new file mode 100644 index 0000000..aebbe8f --- /dev/null +++ b/vm/video/monitor.c @@ -0,0 +1,53 @@ +#include +#include "libutils/utils.h" + +static SDL_Window *window = NULL; +static SDL_Renderer *renderer = NULL; +static SDL_Texture *fonts = NULL; + +int +monitor_setup(void) +{ + SDL_Surface *surface; + + window = SDL_CreateWindow("65∞2", + SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, + 320, 200, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE); + if (window == NULL) + { + fatal("SDL: %s", SDL_GetError()); + } + + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + if (renderer == NULL) + { + fatal("SDL: %s", SDL_GetError()); + } + + SDL_RenderSetLogicalSize(renderer, 320, 200); + + surface = SDL_LoadBMP("res/fonts.bmp"); + if (surface == NULL) + { + fatal("SDL: %s", SDL_GetError()); + } + fonts = SDL_CreateTextureFromSurface(renderer, surface); + if (fonts == NULL) + { + fatal("SDL: %s", SDL_GetError()); + } + SDL_FreeSurface(surface); +} + +void +monitor_draw(void) +{ + SDL_RenderPresent(renderer); +} + +void +monitor_cleanup(void) +{ + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); +} \ No newline at end of file diff --git a/vm/vm.h b/vm/vm.h deleted file mode 100644 index 2e1c5b3..0000000 --- a/vm/vm.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef VM_VM_H -# define VM_VM_H 1 - -# include "cpu.h" -# include "bus.h" - -# define VM_MAX_CPU 8 - -typedef struct -{ - int cpu_count; - Cpu cpus[VM_MAX_CPU]; - - Bus bus; -} Vm; - -#endif /* !VM_VM_H */