Merge branch 'mips32-minimal' into 'master'

增加mips32-minimal AM

See merge request !10
This commit is contained in:
Yanyan Jiang 2017-05-21 15:29:29 +08:00
commit f675c9a53a
48 changed files with 1679 additions and 1 deletions

View File

@ -11,6 +11,11 @@ endif
ifeq ($(ARCH), mips32-npc)
CROSS_COMPILE = mips-linux-gnu-
endif
# TODO: refactor
ifeq ($(ARCH), mips32-minimal)
CROSS_COMPILE = mips-linux-gnu-
endif
AS = $(CROSS_COMPILE)gcc
CC = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
@ -58,6 +63,13 @@ CFLAGS += -MD -fno-pic -static -fno-strict-aliasing -fno-builtin -fno-stack-pr
CXXFLAGS += -fno-pic -static -fno-strict-aliasing -fno-builtin -fno-stack-protector -fno-delayed-branch -mno-abicalls -march=mips32 -ffreestanding -fno-rtti -fno-exceptions -mno-check-zero-division -EL
ASFLAGS += -march=mips32 -EL -MD -mno-check-zero-division -O0 -mno-abicalls -fno-pic -fno-delayed-branch
endif
ifeq ($(ARCH), mips32-minimal)
CXX = $(CROSS_COMPILE)g++-5
CFLAGS += -MD -fno-pic -static -fno-strict-aliasing -fno-builtin -fno-stack-protector -fno-delayed-branch -mno-abicalls -march=mips32 -mno-check-zero-division -EL
CXXFLAGS += -fno-pic -static -fno-strict-aliasing -fno-builtin -fno-stack-protector -fno-delayed-branch -mno-abicalls -march=mips32 -ffreestanding -fno-rtti -fno-exceptions -mno-check-zero-division -EL
ASFLAGS += -march=mips32 -EL -MD -mno-check-zero-division -O0 -mno-abicalls -fno-pic -fno-delayed-branch
endif
ifeq ($(ARCH), x86-qemu)
CFLAGS += -m32 -fno-builtin -fno-stack-protector -fno-omit-frame-pointer
CXXFLAGS += -m32 -fno-builtin -fno-stack-protector -fno-omit-frame-pointer -ffreestanding -fno-rtti -fno-exceptions
@ -109,6 +121,9 @@ play: $(AM_LIB) image
ifeq ($(ARCH), mips32-npc)
@echo "Burn it to FPGA."
endif
ifeq ($(ARCH), mips32-minimal)
@echo "Burn it to FPGA."
endif
ifeq ($(ARCH), native)
@$(DEST)
endif

View File

@ -0,0 +1,3 @@
# MIPS32-Minimal
Minimal AM for testing a CPU implementation

View File

@ -0,0 +1,2 @@
start.o: start.S
mips-linux-gnu-gcc -EL -march=mips32 -fno-pic -MD -mno-abicalls -fno-delayed-branch -c start.S -o start.o

View File

@ -0,0 +1,6 @@
.globl _start
.type _start, @function
_start:
la $sp, _stack_pointer
j main

View File

@ -0,0 +1,9 @@
#!/bin/bash
DIR=./am/arch/mips32-minimal/img
DEST=$1
shift
bash -c "cd $DIR/boot && make"
mips-linux-gnu-ld -EL -T $DIR/loader.ld -e _start -o $DEST $DIR/boot/start.o --start-group $@ --end-group && python $DIR/check.py $DEST

View File

@ -0,0 +1,34 @@
#!/usr/bin/python
import sys, re, subprocess
from subprocess import PIPE
def execute(commands):
p = subprocess.Popen(commands, stdout=PIPE, stderr=PIPE)
(out, err) = p.communicate()
return out
def parse(fname):
# objdump result
INST = re.compile('^([0-9a-f]+):\t([0-9a-f]+)\s+([a-z]+).*$')
# pseudo instrutions
MAP = {
'beqz': 'beq',
'bnez': 'bne',
'negu': 'subu',
}
insts = set()
for line in execute(["mips-linux-gnu-objdump", "-M", "no-aliases", "-d", fname]).split('\n'):
m = INST.match(line.strip())
if m:
inst = m.group(3)
insts.add( MAP.get(inst, inst) )
return sorted(list(insts))
binary = sys.argv[1]
insts = parse(binary)
print "There are {0} instructions:".format(len(insts))
print " {0}".format(" ".join([i.upper() for i in insts]))

View File

@ -0,0 +1,9 @@
SECTIONS {
. = 0x10000000;
. += 8192;
_stack_pointer = .;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
_end = .;
}

View File

@ -0,0 +1,32 @@
#ifndef __ARCH_H__
#define __ARCH_H__
typedef unsigned int u32;
typedef int i32;
typedef unsigned short u16;
typedef short int i16;
typedef unsigned char u8;
typedef char i8;
typedef u32 size_t;
typedef struct _RegSet {
} _RegSet;
#ifdef __cplusplus
extern "C" {
#endif
static inline void _halt(int code) { while (1); }
static inline void _putc(char ch) { }
static inline void _ioe_init() { }
static inline unsigned long _cycles() { return 0; }
static inline unsigned long _uptime() { return 0; }
static inline void _draw_p(int x, int y, u32 p) {}
static inline void _draw_f(u32 *ps) {}
static inline void _draw_sync() {}
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,14 @@
#include <am.h>
extern char _end;
_Area _heap = {
.start = &_end,
.end = &_end,
};
_Screen _screen = {
.width = 0,
.height = 0,
};

View File

@ -1 +0,0 @@
# MIPS32-qemu

View File

@ -0,0 +1,24 @@
#include "trap.h"
long long add(long long a, long long b) {
long long c = a + b;
return c;
}
long long test_data[] = {0, 1, 2, 0x7fffffffffffffffLL, 0x8000000000000000LL, 0x8000000000000001LL, 0xfffffffffffffffeLL, 0xffffffffffffffffLL};
long long ans[] = {0LL, 0x1LL, 0x2LL, 0x7fffffffffffffffLL, 0x8000000000000000LL, 0x8000000000000001LL, 0xfffffffffffffffeLL, 0xffffffffffffffffLL, 0x1LL, 0x2LL, 0x3LL, 0x8000000000000000LL, 0x8000000000000001LL, 0x8000000000000002LL, 0xffffffffffffffffLL, 0LL, 0x2LL, 0x3LL, 0x4LL, 0x8000000000000001LL, 0x8000000000000002LL, 0x8000000000000003LL, 0LL, 0x1LL, 0x7fffffffffffffffLL, 0x8000000000000000LL, 0x8000000000000001LL, 0xfffffffffffffffeLL, 0xffffffffffffffffLL, 0LL, 0x7ffffffffffffffdLL, 0x7ffffffffffffffeLL, 0x8000000000000000LL, 0x8000000000000001LL, 0x8000000000000002LL, 0xffffffffffffffffLL, 0LL, 0x1LL, 0x7ffffffffffffffeLL, 0x7fffffffffffffffLL, 0x8000000000000001LL, 0x8000000000000002LL, 0x8000000000000003LL, 0LL, 0x1LL, 0x2LL, 0x7fffffffffffffffLL, 0x8000000000000000LL, 0xfffffffffffffffeLL, 0xffffffffffffffffLL, 0LL, 0x7ffffffffffffffdLL, 0x7ffffffffffffffeLL, 0x7fffffffffffffffLL, 0xfffffffffffffffcLL, 0xfffffffffffffffdLL, 0xffffffffffffffffLL, 0LL, 0x1LL, 0x7ffffffffffffffeLL, 0x7fffffffffffffffLL, 0x8000000000000000LL, 0xfffffffffffffffdLL, 0xfffffffffffffffeLL};
#define NR_DATA (sizeof(test_data) / sizeof(test_data[0]))
int main() {
int i, j, ans_idx = 0;
for(i = 0; i < NR_DATA; i ++) {
for(j = 0; j < NR_DATA; j ++) {
nemu_assert(add(test_data[i], test_data[j]) == ans[ans_idx ++]);
}
}
HIT_GOOD_TRAP;
return 0;
}

27
apps/cputest/add.c Normal file
View File

@ -0,0 +1,27 @@
#include "trap.h"
int add(int a, int b) {
int c = a + b;
return c;
}
int test_data[] = {0, 1, 2, 0x7fffffff, 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff};
int ans[] = {0, 0x1, 0x2, 0x7fffffff, 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff, 0x1, 0x2, 0x3, 0x80000000, 0x80000001, 0x80000002, 0xffffffff, 0, 0x2, 0x3, 0x4, 0x80000001, 0x80000002, 0x80000003, 0, 0x1, 0x7fffffff, 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff, 0, 0x7ffffffd, 0x7ffffffe, 0x80000000, 0x80000001, 0x80000002, 0xffffffff, 0, 0x1, 0x7ffffffe, 0x7fffffff, 0x80000001, 0x80000002, 0x80000003, 0, 0x1, 0x2, 0x7fffffff, 0x80000000, 0xfffffffe, 0xffffffff, 0, 0x7ffffffd, 0x7ffffffe, 0x7fffffff, 0xfffffffc, 0xfffffffd, 0xffffffff, 0, 0x1, 0x7ffffffe, 0x7fffffff, 0x80000000, 0xfffffffd, 0xfffffffe};
#define NR_DATA (sizeof(test_data) / sizeof(test_data[0]))
int main() {
int i, j, ans_idx = 0;
for(i = 0; i < NR_DATA; i ++) {
for(j = 0; j < NR_DATA; j ++) {
nemu_assert(add(test_data[i], test_data[j]) == ans[ans_idx ++]);
}
}
nemu_assert(i == NR_DATA);
nemu_assert(j == NR_DATA);
HIT_GOOD_TRAP;
return 0;
}

47
apps/cputest/bit.c Normal file
View File

@ -0,0 +1,47 @@
#include "trap.h"
typedef unsigned char uint8_t;
typedef char bool;
__attribute__((noinline))
bool getbit(void *buf, int offset){
int byte = offset >> 3;
offset &= 7;
uint8_t mask = 1 << offset;
return (((uint8_t *)buf)[byte] & mask) != 0;
}
__attribute__((noinline))
void setbit(void *buf, int offset, bool bit){
int byte = offset >> 3;
offset &= 7;
uint8_t mask = 1 << offset;
uint8_t * volatile p = buf + byte;
*p = (bit == 0 ? (*p & ~mask) : (*p | mask));
}
int main() {
uint8_t buf[2];
buf[0] = 0xaa;
nemu_assert(getbit(buf, 0) == 0);
nemu_assert(getbit(buf, 1) == 1);
nemu_assert(getbit(buf, 2) == 0);
nemu_assert(getbit(buf, 3) == 1);
nemu_assert(getbit(buf, 4) == 0);
nemu_assert(getbit(buf, 5) == 1);
nemu_assert(getbit(buf, 6) == 0);
nemu_assert(getbit(buf, 7) == 1);
setbit(buf, 8, 1);
setbit(buf, 9, 0);
setbit(buf, 10, 1);
setbit(buf, 11, 0);
setbit(buf, 12, 1);
setbit(buf, 13, 0);
setbit(buf, 14, 1);
setbit(buf, 15, 0);
nemu_assert(buf[1] == 0x55);
HIT_GOOD_TRAP;
return 0;
}

View File

@ -0,0 +1,41 @@
#include "trap.h"
#define N 100
int a[N] = {81, 37, 64, 23, 38, 65, 56, 15, 8, 33, 85, 39, 71, 12, 77, 6, 82, 89, 80, 35, 0, 59, 73, 4, 61, 30, 74, 69, 13, 42, 68, 63, 9, 29, 47, 36, 99, 25, 21, 14, 60, 3, 2, 18, 26, 83, 53, 5, 43, 67, 88, 70, 76, 92, 94, 48, 34, 49, 66, 95, 78, 62, 32, 52, 16, 72, 27, 28, 22, 40, 84, 91, 96, 57, 87, 51, 98, 1, 10, 11, 24, 20, 19, 31, 7, 97, 50, 86, 79, 17, 75, 55, 93, 44, 58, 54, 45, 41, 90, 46};
void bubble_sort() {
int i, j, t;
for(j = 0; j < N; j ++) {
for(i = 0; i < N - 1 - j; i ++) {
if(a[i] > a[i + 1]) {
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
}
int main() {
bubble_sort();
int i;
for(i = 0; i < N; i ++) {
nemu_assert(a[i] == i);
}
nemu_assert(i == N);
bubble_sort();
for(i = 0; i < N; i ++) {
nemu_assert(a[i] == i);
}
nemu_assert(i == N);
HIT_GOOD_TRAP;
return 0;
}

21
apps/cputest/fact.c Normal file
View File

@ -0,0 +1,21 @@
#include "trap.h"
int f[15];
int ans[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600};
int fact(int n) {
if(n == 0 || n == 1) return 1;
else return fact(n - 1) * n;
}
int main() {
int i;
for(i = 0; i < 13; i ++) {
f[i] = fact(i);
nemu_assert(f[i] == ans[i]);
}
HIT_GOOD_TRAP;
return 0;
}

15
apps/cputest/fib.c Normal file
View File

@ -0,0 +1,15 @@
#include "trap.h"
int fib[40] = {1, 1};
int ans[] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155};
int main() {
int i;
for(i = 2; i < 40; i ++) {
fib[i] = fib[i - 1] + fib[i - 2];
nemu_assert(fib[i] == ans[i]);
}
HIT_GOOD_TRAP;
return 0;
}

36
apps/cputest/gotbaha.c Normal file
View File

@ -0,0 +1,36 @@
#include "trap.h"
int is_prime(int n) {
if(n < 2) return 0;
int i;
for(i = 2; i < n; i ++) {
if(n % i == 0) {
return 0;
}
}
return 1;
}
int gotbaha(int n) {
int i;
for(i = 2; i < n; i ++) {
if(is_prime(i) && is_prime(n - i)) {
return 1;
}
}
return 0;
}
int main() {
int n;
for(n = 4; n <= 100; n += 2) {
nemu_assert(gotbaha(n) == 1);
}
HIT_GOOD_TRAP;
return 0;
}

View File

@ -0,0 +1,15 @@
#include "trap.h"
const char str[] = "Hello, world!\n";
int main() {
asm volatile ( "movl $4, %eax;" // system call ID, 4 = SYS_write
"movl $1, %ebx;" // file descriptor, 1 = stdout
"movl $str, %ecx;" // buffer address
"movl $14, %edx;" // length
"int $0x80");
HIT_GOOD_TRAP;
return 0;
}

28
apps/cputest/hello-str.c Normal file
View File

@ -0,0 +1,28 @@
#include <stdio.h>
#include <string.h>
#include "trap.h"
char buf[128];
/* This function is defined only to make the newlibc linkable.
* Without it, errors will be reported during linking.
* But the execution flow should not reach here.
*/
void *sbrk(int incr) {
nemu_assert(0);
return NULL;
}
int main() {
sprintf(buf, "%s", "Hello world!\n");
nemu_assert(strcmp(buf, "Hello world!\n") == 0);
sprintf(buf, "%d + %d = %d\n", 1, 1, 2);
nemu_assert(strcmp(buf, "1 + 1 = 2\n") == 0);
sprintf(buf, "%d + %d = %d\n", 2, 10, 12);
nemu_assert(strcmp(buf, "2 + 10 = 12\n") == 0);
HIT_GOOD_TRAP;
return 0;
}

68
apps/cputest/hello.c Normal file
View File

@ -0,0 +1,68 @@
#include <stdio.h>
#include <string.h>
#include <sys/syscall.h>
#include <sys/stat.h>
#include "trap.h"
int __attribute__((__noinline__))
syscall(int id, ...) {
int ret;
int *args = &id;
asm volatile("int $0x80": "=a"(ret) : "a"(args[0]), "b"(args[1]), "c"(args[2]), "d"(args[3]));
return ret;
}
int read(int fd, char *buf, int len) {
nemu_assert(0);
return 0;
}
int write(int fd, char *buf, int len) {
return syscall(__NR_write, fd, buf, len);
}
off_t lseek(int fd, off_t offset, int whence) {
nemu_assert(0);
return 0;
}
void *sbrk(int incr) {
extern char end; /* Defined by the linker */
static char *heap_end;
char *prev_heap_end;
if (heap_end == 0) {
heap_end = &end;
}
prev_heap_end = heap_end;
if( syscall(SYS_brk, heap_end + incr) == 0) {
heap_end += incr;
}
return prev_heap_end;
}
int close(int fd) {
nemu_assert(0);
return 0;
}
int fstat(int fd, struct stat *buf) {
// buf->st_mode = S_IFCHR;
return 0;
}
int isatty(int fd) {
nemu_assert(0);
return 0;
}
int main() {
printf("%s", "Hello world!\n");
printf("%d + %d = %d\n", 1, 1, 2);
HIT_GOOD_TRAP;
return 0;
}

28
apps/cputest/if-else.c Normal file
View File

@ -0,0 +1,28 @@
#include "trap.h"
int if_else(int n) {
int cost;
if(n > 500) cost = 150;
else if(n > 300) cost = 100;
else if(n > 100) cost = 75;
else if(n > 50) cost = 50;
else cost = 0;
return cost;
}
int test_data[] = {-1, 0, 49, 50, 51, 99, 100, 101, 299, 300, 301, 499, 500, 501};
int ans[] = {0, 0, 0, 0, 50, 50, 50, 75, 75, 75, 100, 100, 100, 150};
#define NR_DATA (sizeof(test_data) / sizeof(test_data[0]))
int main() {
int i, ans_idx = 0;
for(i = 0; i < NR_DATA; i ++) {
nemu_assert(if_else(test_data[i]) == ans[ans_idx ++]);
}
HIT_GOOD_TRAP;
return 0;
}

146
apps/cputest/integral.c Normal file
View File

@ -0,0 +1,146 @@
#include "trap.h"
typedef int FLOAT;
static inline int F2int(FLOAT a) {
int carry=(a & 0xffff) >= 0x8000;
return (a>>16) + carry;
}
static inline FLOAT int2F(int a) {
return a<<16;
}
static inline FLOAT F_mul_int(FLOAT a, int b) {
return a*b;
}
static inline FLOAT F_div_int(FLOAT a, int b) {
return a/b;
}
FLOAT f2F(float);
FLOAT F_mul_F(FLOAT, FLOAT);
FLOAT F_div_F(FLOAT, FLOAT);
FLOAT Fabs(FLOAT);
FLOAT sqrt(FLOAT);
FLOAT pow(FLOAT, FLOAT);
FLOAT f(FLOAT x) {
/* f(x) = 1/(1+25x^2) */
return F_div_F(int2F(1), int2F(1) + F_mul_int(F_mul_F(x, x), 25));
}
FLOAT computeT(int n, FLOAT a, FLOAT b, FLOAT (*fun)(FLOAT)) {
int k;
FLOAT s,h;
h = F_div_int((b - a), n);
s = F_div_int(fun(a) + fun(b), 2 );
for(k = 1; k < n; k ++) {
s += fun(a + F_mul_int(h, k));
}
s = F_mul_F(s, h);
return s;
}
int main() {
FLOAT a = computeT(10, f2F(-1.0), f2F(1.0), f);
FLOAT ans = f2F(0.551222);
nemu_assert(Fabs(a - ans) < f2F(1e-4));
HIT_GOOD_TRAP;
return 0;
}
FLOAT F_mul_F(FLOAT a, FLOAT b) {
//return ((a>>4)*(b>>4))>>8;
//long long r=((long long)a * b)>>16;
//return (FLOAT)(r & 0xffffffff); //if I use this way, shrd instruction is not surported.
union {
long long l;
struct {
unsigned short twobyte1,twobyte2,twobyte3,twobyte4;
};
}temp;
temp.l=(long long)a*b;
return (unsigned int)(temp.twobyte2) + (((unsigned int)temp.twobyte3)<<16);
}
FLOAT F_div_F(FLOAT a, FLOAT b) {
return (a<<13)/(b>>3);
//This is other pepele's help.
/* unsigned sign=(a & 0x80000000) ^ (b & 0x80000000);
unsigned ua=a & 0x7fffffff,
ub=b & 0x7fffffff;
int result=((ua/ub)<<16);
unsigned remain=ua%ub;
int i=0;
for(;i<16;i++)
{
remain<<=1;
if(sign==0)
result+=(remain/ub)<<(15-i);
else
result-=(remain/ub)<<(15-i);
remain%=ub;
}
return result | sign;
*/
}
FLOAT f2F(float a) {
union fi {
float f;
int i;
}temp;
temp.f=a;
int exp=((temp.i & 0x7f800000)>>23) - 127;
int m=(temp.i & 0x7fffff) + 0x800000;
int sign=0x80000000 & temp.i;
//Assert(exp<=14, "float to FLOAT overflow!");
FLOAT result;
if(exp>7)
result=m<<(exp-7);
else
result=m>>(7-exp);
if(sign==0)
return result;
else
return -result;
}
FLOAT Fabs(FLOAT a) {
return (a>=0) ? a : (-a);
}
FLOAT sqrt(FLOAT x) {
FLOAT dt, t = int2F(2);
do {
dt = F_div_int((F_div_F(x, t) - t), 2);
t += dt;
} while(Fabs(dt) > f2F(1e-4));
return t;
}
FLOAT pow(FLOAT x, FLOAT y) {
/* we only compute x^0.333 */
FLOAT t2, dt, t = int2F(2);
do {
t2 = F_mul_F(t, t);
dt = (F_div_F(x, t2) - t) / 3;
t += dt;
} while(Fabs(dt) > f2F(1e-4));
return t;
}

18
apps/cputest/leap-year.c Normal file
View File

@ -0,0 +1,18 @@
#include "trap.h"
int is_leap_year(int n) {
return (n % 4 == 0 && n % 100 != 0) || (n % 400 == 0);
}
int ans[] = {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0};
int main() {
int i;
for(i = 0; i < 125; i ++) {
nemu_assert(is_leap_year(i + 1890) == ans[i]);
}
HIT_GOOD_TRAP;
return 0;
}

52
apps/cputest/load-store.c Normal file
View File

@ -0,0 +1,52 @@
#include "trap.h"
//#include <stdio.h>
//#include <assert.h>
#define ARR_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
unsigned short mem[] = {
0x0, 0x0258, 0x4abc, 0x7fff, 0x8000, 0x8100, 0xabcd, 0xffff
};
unsigned lh_ans[] = {
0x00000000, 0x00000258, 0x00004abc, 0x00007fff, 0xffff8000, 0xffff8100, 0xffffabcd, 0xffffffff
};
unsigned lhu_ans[] = {
0x00000000, 0x00000258, 0x00004abc, 0x00007fff, 0x00008000, 0x00008100, 0x0000abcd, 0x0000ffff
};
unsigned sh_ans[] = {
0x0000fffd, 0x0000fff7, 0x0000ffdf, 0x0000ff7f, 0x0000fdff, 0x0000f7ff, 0x0000dfff, 0x00007fff
};
unsigned lwlr_ans[] = {
0xbc025800, 0x7fff4a, 0xcd810080, 0xffffab
};
int main() {
unsigned i;
for(i = 0; i < ARR_SIZE(mem); i ++) {
nemu_assert((short)mem[i] == lh_ans[i]);
}
for(i = 0; i < ARR_SIZE(mem); i ++) {
nemu_assert(mem[i] == lhu_ans[i]);
}
for(i = 0; i < (ARR_SIZE(mem) / 2); i ++) {
unsigned x = ((unsigned*)((void*)mem + 1))[i];
nemu_assert(x == lwlr_ans[i]);
}
for(i = 0; i < ARR_SIZE(mem); i ++) {
mem[i] = ~(1 << (2 * i + 1));
nemu_assert(mem[i] == sh_ans[i]);
}
HIT_GOOD_TRAP;
return 0;
}

25
apps/cputest/lwl.c Normal file
View File

@ -0,0 +1,25 @@
#include "trap.h"
int x = 0xffffffff;
int main() {
asm volatile("lui $t0, 0x0102\n\t" \
"ori $t0, $t0, 0x0304\n\t" \
"sw $t0, 0x1000($zero)\n\t" \
"lui $t0, 0x0506\n\t" \
"ori $t0, $t0, 0x0708\n\t" \
"sw $t0, 0x1004($zero)\n\t" \
"lwl $t1, 0x1001($zero)\n\t" \
"lwr $t1, 0x1006($zero)\n\t" \
"sw $t1, %0\n\t" \
:"=m"(x) \
);
nemu_assert(x == 0x03040506);
HIT_GOOD_TRAP;
return 0;
}

View File

@ -0,0 +1,58 @@
#include "trap.h"
#define N 10
int a[N][N] = {
{31, -73, -67, -28, 87, -17, -15, -35, -53, -54},
{52, 36, 9, -91, -27, -78, 42, 82, 19, -6},
{41, -56, 31, 32, -52, 74, 28, 20, 55, -72},
{-59, 2, -79, -8, 44, 55, -83, -95, -45, 50},
{-95, 61, -63, 62, -16, 52, 40, 92, -32, -26},
{-99, 52, 96, 63, -75, -74, -82, 82, -95, 42},
{11, -22, 27, -27, -27, -76, -71, 58, -40, -65},
{91, -53, -67, 72, 36, -77, -3, 93, -24, 97},
{-52, -11, -77, -93, -92, -24, 70, 18, 56, 88},
{-43, -41, -26, 11, -84, -14, -41, 83, 27, -11}
};
int b[N][N] = {
{-48, -70, -40, -82, -74, -63, -59, -72, -100, -72},
{5, -84, 28, 56, 60, -33, -42, -50, -83, -83},
{-5, 5, 48, 75, -78, -9, 9, 2, 88, 70},
{69, 23, 66, 66, -11, 50, 67, 18, -58, 76},
{30, 45, 32, 25, -73, 57, -67, -14, 53, -33},
{98, -86, -63, 80, -45, -88, 80, -64, 58, -84},
{-55, -39, -13, -27, -37, 8, -96, 84, -89, 31},
{-82, 58, 81, -41, -58, 36, 76, -79, -29, 23},
{86, -46, 16, -18, 81, 90, 35, -90, 43, 55},
{-38, -19, -40, 82, -76, 57, -29, -2, 79, -48},
};
int ans[N][N] = {
{-1317, 10379, -5821, -14322, -4330, -3114, -9940, 7033, -1883, -6027},
{-24266, -861, 4044, -19824, -223, 886, -11988, -6442, -13846, -1054},
{9783, -7073, -918, -5911, -967, -7100, 14605, -7556, -3439, 9607},
{15980, -520, -13297, 15043, 6185, -3654, 1325, 4193, 16925, -17761},
{2566, 3187, 10248, 7925, 6318, 1421, 14648, 700, -12193, 1083},
{-12603, 19006, 20952, 18599, -1539, 5184, 17408, 6740, 6264, 15114},
{-12715, 15121, 9963, -13717, 2411, -2196, 6147, -1698, -3389, 8200},
{-19007, 12417, 5723, -11309, -19242, 15740, -3791, -3949, -13130, -21},
{-12557, -5970, -11570, -8905, 12227, 7814, -5094, 4532, 1071, -1309},
{-2955, 9381, 6372, -6898, 9117, 5753, 20778, -5045, 1047, 12114}};
int c[N][N];
int main() {
int i, j, k;
for(i = 0; i < N; i ++) {
for(j = 0; j < N; j ++) {
c[i][j] = 0;
for(k = 0; k < N; k ++) {
c[i][j] += a[i][k] * b[k][j];
}
nemu_assert(c[i][j] == ans[i][j]);
}
}
HIT_GOOD_TRAP;
return 0;
}

326
apps/cputest/matrix-mul.c Normal file
View File

@ -0,0 +1,326 @@
#include "trap.h"
#define N 100
int a[N][N] = {{31, -73, -67, -28, 87, -17, -15, -35, -53, -54, 72, -33, -99, 12, -33, 32, 17, 80, 71, 21, -21, 47, 98, 44, -87, 78, -93, -56, 62, 3, -79, -72, 46, 93, -86, 80, -29, 61, -8, -82, -5, 94, 93, 66, -2, 38, 5, 62, -21, -74, -78, -10, -14, -34, 8, -64, 85, -91, 73, -62, 98, 43, -5, -41, 65, 72, -56, 84, -34, -39, -62, 30, -19, 6, -81, -70, -27, -27, 83, -6, 22, -13, -19, -100, -27, -27, 12, -61, -5, 51, -58, -16, 8, -65, 45, -60, 0, -11, 99, -20},
{52, 36, 9, -91, -27, -78, 42, 82, 19, -6, -1, -64, -87, 32, 68, 89, -31, -12, -95, -14, -91, -2, -29, 6, -50, 60, -14, -48, -26, -84, 0, 14, -17, -48, -49, -29, 4, 17, 55, -30, 28, -41, 79, -82, -100, -52, 92, 26, 17, -32, -78, -15, -87, -95, 30, 26, -42, 76, -52, -57, 82, -95, -95, 54, -38, 47, -35, 14, 87, 99, 0, -21, -38, 48, -98, -37, -66, 11, -100, -34, 91, -49, 97, -13, 89, -95, -88, 52, -56, 38, -57, 83, 74, -32, -85, 40, -49, -86, -39, 37},
{41, -56, 31, 32, -52, 74, 28, 20, 55, -72, -25, 28, 12, 27, 48, 27, 60, 47, 19, -81, -46, 62, 2, -16, -77, 31, 84, -76, 5, 73, 69, -53, -28, 24, -74, -85, -12, -86, -88, 3, -34, -15, 97, -49, -86, 9, 25, -84, 3, -54, -16, 13, 91, -33, -19, 91, 57, 49, 39, -91, 77, -60, 79, -96, 48, 15, -36, 9, -41, 63, -50, -61, 36, -34, -7, 32, -2, -24, 80, -37, -17, 13, 58, -41, 2, -39, -19, 12, 92, -56, -95, -41, 0, -16, 21, 61, -23, -92, -52, 56},
{-59, 2, -79, -8, 44, 55, -83, -95, -45, 50, 41, 32, 37, 58, 59, -61, -64, -24, -40, 76, -91, 7, -50, 45, -42, -67, 11, 71, -42, -10, 48, 71, 75, -1, 67, 93, 58, 56, -32, -34, 0, 27, 70, 64, 31, 50, 35, 69, 20, 47, -5, 69, 44, 18, 30, -9, -63, 94, -80, 87, -88, 84, 63, -90, 25, -24, -99, 77, -26, -38, -67, 86, 24, 81, 38, -52, -90, -98, 37, -90, 22, -66, 87, -79, -88, 69, 40, -81, 36, 13, -28, -19, 46, -91, -53, -50, 61, -55, 52, 61},
{-95, 61, -63, 62, -16, 52, 40, 92, -32, -26, -24, 89, 12, 85, -96, 81, 80, 6, -73, -5, -5, -79, -68, -74, 18, 19, 76, 83, -54, 6, -82, -89, 82, -29, 38, 22, 65, 74, -40, -99, 1, 24, 33, -30, 79, 82, -36, -1, -36, -92, -11, 40, 77, -48, 15, 67, -22, 49, 2, -4, 96, -70, 76, 63, -96, 95, -46, 47, -98, -79, 57, 89, 36, 51, 58, -28, -70, -29, 36, 99, 58, 85, -67, 47, -64, -44, -39, -16, 84, 39, 87, -99, -82, -76, -89, -54, 21, 33, -33, 42},
{-99, 52, 96, 63, -75, -74, -82, 82, -95, 42, 33, 86, 23, 60, 52, 50, -95, 20, -8, 33, -9, -19, 39, -2, 73, 13, 81, 12, 22, 99, -21, 33, -95, -15, -59, 66, -18, 46, -85, -30, 88, -5, 38, 78, -68, -61, -21, 96, 78, 33, 56, -92, -97, 64, 2, 58, 21, -88, -87, -77, 19, -39, 87, 87, 96, -59, 24, 43, 55, -3, -7, -49, -39, -75, -95, 76, -37, -24, -53, 20, -12, 48, 62, -8, 98, -22, 98, -43, 45, -62, -66, -72, -97, 1, -29, -54, 35, 25, -15, 67},
{11, -22, 27, -27, -27, -76, -71, 58, -40, -65, 84, -9, -72, 21, 38, -47, -15, -37, 23, -14, 51, -43, -34, 16, 78, -91, -10, 86, -79, 36, 95, -91, -74, -55, 60, -2, 45, 47, -26, 93, 19, 19, -44, -68, 64, 89, 10, 43, -78, 90, -76, 49, 0, -63, 11, 31, -66, 44, -41, -29, -3, -14, -90, -100, 22, -30, 82, -79, -33, 61, -59, 14, -54, -79, 39, -68, 5, 47, -49, -96, -11, 77, -54, -42, 60, 97, -85, 81, -75, -30, -100, 52, 72, 25, -53, -46, 57, 61, 81, -31},
{91, -53, -67, 72, 36, -77, -3, 93, -24, 97, -99, -88, -66, 13, 45, -39, 53, -54, -11, -54, -39, 13, 49, 79, 30, 1, -16, -59, -61, -14, -11, -28, -92, 34, 37, 23, 53, -40, -53, -20, 20, -40, 99, -24, -92, -78, -86, 96, 16, -29, -38, 55, 35, -77, -93, 12, 89, -64, 78, 78, 79, 39, 98, 19, -82, 20, 37, -99, -57, -94, -69, -19, -57, 12, 34, 11, 94, -90, 38, -41, 20, 90, 58, 29, 19, 55, -94, -25, 7, 74, 82, 7, -61, -27, 99, 35, -85, -20, -32, -21},
{-52, -11, -77, -93, -92, -24, 70, 18, 56, 88, -73, 78, 52, 20, -81, 11, 37, -26, -79, 47, 67, 71, 10, 48, 85, 74, 15, -93, 63, 43, 82, 55, 58, 84, -85, 60, 7, 21, 25, 89, -39, 22, -80, 47, 60, -77, -52, -86, 11, -10, -18, -38, -14, -36, 56, 21, 68, -3, 25, -23, -62, 32, -70, 96, -4, -80, -11, -27, 69, 38, 42, -54, -94, -97, -9, 21, -16, 19, 51, 60, 54, 30, 67, 22, -56, -86, -29, -99, 8, 61, 89, 85, -13, -56, 72, 90, -12, 22, -24, -4},
{-43, -41, -26, 11, -84, -14, -41, 83, 27, -11, 35, 31, 51, 83, -98, -48, 41, -7, 23, 50, -72, -51, -41, 38, 63, 90, -42, -75, -21, 41, -61, -7, -92, 0, 42, 74, -62, 62, 11, 87, -21, -24, -97, -49, 10, 64, -11, -66, 96, 32, 36, -87, 86, 75, -72, 24, 97, 49, 2, -17, -52, -33, -44, 38, 88, -5, -19, -97, -64, 16, 97, -23, -59, 95, -17, -40, -71, -31, -15, -58, 82, 1, 49, -66, -65, 55, 43, 79, 62, -69, -96, 77, -25, -30, 9, -67, 53, -42, 91, -59},
{95, 63, 32, -74, -32, -56, -47, -43, 23, -11, 44, -72, 62, 52, 31, -16, -55, 68, 41, 76, -97, -19, 45, 86, 69, -96, 2, 15, -29, 70, 65, -68, -47, 40, -2, -97, -60, -38, -22, 9, -72, 13, -2, 47, -53, 23, 23, 27, -41, 70, -61, 62, 13, 68, 77, -62, 42, -12, 31, 61, 4, -53, 43, -97, 45, -37, -50, -85, 55, 54, 64, -10, -52, -49, 65, -38, -51, -52, -64, 47, 28, 18, 41, -7, -31, -72, 43, -7, -52, -25, 9, -66, 99, -44, -15, 70, 18, 43, 74, 7},
{-65, -70, 58, 22, 71, 72, -13, -4, -59, -26, -41, -8, -15, 41, -28, -45, -11, 91, 12, -46, -85, -31, 38, 40, -31, -42, 63, 62, 39, -88, 5, -77, -43, 93, -68, 57, 79, 1, -5, -100, 60, 97, 14, -24, -85, 68, 8, 70, 10, -62, 16, -7, 26, 16, 88, -10, 27, -76, 51, -54, 41, 43, 11, 18, -71, -80, -43, 92, -40, -39, 77, 0, 43, -2, 78, 65, -37, -27, 25, -48, 0, -48, 37, 97, -43, 97, 62, -9, 75, 4, 89, 76, -19, 31, -59, 14, -93, 55, 63, -6},
{14, -93, -6, -13, 91, 26, 65, 86, 4, 57, -95, 42, 42, -39, 53, -22, 4, -3, -12, 71, 27, -87, 3, -57, -32, -44, 76, 90, -52, 75, 59, -78, -56, 65, -45, 64, 37, 79, 28, 4, -22, 74, 12, -24, 68, -34, -90, -5, 59, 38, 49, 1, -68, -69, 58, 10, -51, 95, -99, -75, -25, -100, 32, -57, 8, -90, 89, -5, -53, 34, -85, 94, -19, 77, -88, 55, -54, -23, -97, 75, -93, 68, -51, 69, 42, -46, 0, 25, 89, 67, -91, 93, -70, 38, -52, 44, -1, 55, 27, 48},
{32, -17, -98, 18, -85, -3, 60, -68, -83, -77, -64, -28, -69, 87, -44, -15, -10, 73, 29, 88, 30, -27, -21, -67, 80, 14, 76, 3, 66, -30, 77, 63, -24, 12, 32, -46, -11, -43, 85, 69, 46, 33, -77, -18, -22, 64, 8, 23, -85, 41, -61, 14, -24, -99, -39, 31, -94, -18, 1, 71, -31, 87, -38, 13, -50, 29, 54, 70, -85, 96, -54, -63, 43, 86, 88, 28, -56, 86, 78, -13, -43, 19, -87, 46, 17, -43, -79, 67, -30, 13, -38, 15, 57, 64, 52, 16, -79, 73, -71, -86},
{66, -39, -30, -43, 34, 50, 64, -45, 18, -92, 75, -20, 12, 34, -23, 91, 25, 84, -67, -60, 63, -81, -92, -100, 98, 97, -14, -74, 86, 96, -87, -40, 92, 90, -63, -52, -80, -20, -6, 7, -59, 69, -15, -70, -40, -13, 65, -32, 43, 34, -12, 33, -98, -59, 97, 40, 56, -30, -43, -84, -22, -6, -97, 53, -80, -21, 74, -27, 29, -76, 66, 18, -26, -33, 93, 4, 87, -81, 13, -10, 17, -2, 34, 72, -63, 42, 61, -71, 53, -78, 79, 21, -24, -38, -82, -73, 21, -18, -4, -29},
{-97, -60, -74, -45, 17, -71, 55, 67, 95, 25, 33, -48, -23, -86, 41, 62, -97, -88, 75, 12, -4, -8, 95, -65, 93, 8, -36, -62, -52, -82, -58, -62, -14, -74, 18, 5, 83, -82, 61, 21, 17, 38, 43, -74, 32, -16, 28, 71, 25, -25, -61, -91, -19, 53, 84, 2, -44, 86, 68, -6, 60, 79, -47, -46, -48, 25, -87, -82, -34, -58, 97, -44, -12, 57, 59, -88, -69, 60, -6, 67, -52, 89, 79, -39, 30, -99, 3, -62, -48, 51, -53, -16, 7, -33, 63, -1, -70, -74, -100, 60},
{-6, 14, 70, -8, 48, 87, 10, -74, 71, 70, 83, -1, -86, 27, -32, -4, -100, -37, 15, 46, 50, -89, 8, 82, -66, 18, 26, 82, -54, 6, 49, -72, 17, 21, 98, -52, 52, 13, -100, -57, 99, 55, -17, -83, -100, 48, -22, -1, 72, 80, 91, -77, 92, 7, 83, 31, -83, -40, 77, 34, 5, -22, 64, -17, 2, -41, 96, 89, 71, -14, 52, -10, 4, -79, -16, -90, 43, -23, -81, 95, 28, 19, -10, -83, 58, 20, 21, -69, -35, -41, -36, -9, 10, 14, -19, 55, 17, -14, 35, 72},
{59, 55, -45, -91, 43, 74, -58, 67, 38, -66, -5, 81, -85, -25, -25, 96, -7, -82, -58, 73, -52, -3, 64, 94, -51, -25, -27, -39, -72, 92, 37, -59, -8, -18, -62, -28, 6, -20, 85, 26, 59, 32, 61, 22, -66, 96, -46, 5, -100, -18, 47, -23, -24, -23, 37, -52, 8, 29, -22, 63, -31, -64, -47, -29, -19, -56, -89, -65, 84, 1, -81, 69, -66, 48, -94, 76, 27, 52, 6, 85, -20, 20, 4, 31, -81, 61, -15, 17, 33, -69, -67, 68, 72, -56, -53, 70, 64, 70, 98, 8},
{-63, 60, 3, -58, -53, 29, 86, 45, 69, 41, 24, -53, 53, 8, -77, -27, 89, 35, -86, -67, 8, -53, -89, 8, -14, 0, 12, -50, 17, 69, -22, 4, 79, -84, -26, 60, 64, 80, 3, -40, -10, 4, -88, 72, 69, 73, -12, -81, -79, 66, -63, -71, -15, 28, -98, -18, -47, 98, 98, -2, -83, 19, 0, -71, 26, 69, 21, 16, -36, -1, 37, -38, -28, 59, 36, 42, -20, 62, 52, -45, 39, 46, -21, 71, -88, -90, 56, -56, -14, -97, -39, -21, -94, -26, 85, 42, -42, 38, 3, -19},
{32, 69, -31, -80, 68, -67, 20, -25, 53, 90, 83, -84, 72, 30, -85, -5, 60, 87, 81, -60, 83, 31, 85, 35, 8, 81, -91, -16, 51, 61, -18, -34, -75, 75, 66, 9, 92, 57, 99, -80, 69, 50, 99, -36, 52, -79, 86, 81, -54, 23, -24, -35, -28, 50, 15, 30, 72, 67, -82, 77, -91, 58, -61, 59, -100, -99, -34, -50, -59, 14, 71, 46, -23, -82, -3, -81, 46, -47, -80, 74, 99, -50, 46, 57, -48, -4, -32, -30, -40, 94, 88, -85, -6, -76, 37, 35, -22, 55, 89, 63},
{-13, 69, -94, -94, -20, 75, 65, 55, 63, 25, -19, 89, 50, -13, 12, 34, -85, 8, -5, -60, -34, 96, 58, 94, -66, 25, 32, -73, 63, 27, 18, -72, -32, 6, 54, -8, 14, 55, 44, 45, 72, -54, -11, -8, -7, -19, 84, -4, 97, 68, -47, 23, -47, -61, -17, -21, 58, -36, 4, -47, -21, 12, 95, -32, 14, -53, -51, 34, 4, -97, -87, 94, -36, 72, 19, -31, 11, 66, 41, -98, -77, 75, 23, -22, 87, -86, -81, 25, 71, 56, 22, 94, 59, -57, 47, -39, -54, 46, -2, 48},
{-91, -61, -26, -84, -87, -11, 3, -28, 47, -33, -36, -84, 65, 83, -10, -47, -55, -68, 60, -31, 25, -88, 45, -57, 3, 39, -61, -71, -30, 71, -5, 64, 73, 64, 49, -89, -4, -45, 64, -14, 60, 39, 34, 7, -15, 17, -92, -27, 82, -81, 75, 10, 59, 12, -85, -5, 77, 27, 56, -33, -83, -78, 71, 59, -63, -63, 61, -65, -36, 48, -1, -94, -22, 39, -28, -72, -5, -33, -98, 72, 8, 56, -40, -6, -8, 7, -14, 71, 51, 3, -80, -84, -15, 34, -39, -20, -81, 92, -72, 55},
{-19, -85, 28, -65, -100, 58, -79, -11, -42, 95, -18, 93, -37, 81, 76, 16, 3, 28, -30, -86, -46, -8, -2, 34, 56, 80, 8, 40, 11, 68, 61, -4, 20, -53, 39, -86, 37, -79, 91, 44, 89, 86, -50, 25, 51, -100, -18, -19, 20, 45, -6, -95, 69, 71, -63, 8, 92, -72, -24, 55, 51, -57, -49, 87, -95, 35, 96, -66, -30, 26, -26, -14, 84, -39, 71, -61, 24, 7, -93, -97, 32, -37, -70, -6, -44, 11, 59, 48, 67, 56, 30, -87, -21, 33, 20, -49, -74, 32, 64, -88},
{-100, 2, 77, -93, -88, -64, 12, 0, -26, 81, -26, 50, -1, -39, 10, -64, 2, 25, 89, 76, -51, -52, 66, -44, -61, 39, -30, 18, 72, 84, 58, -52, 59, -9, -41, -46, -68, 25, 8, 43, 70, -88, 23, 61, -37, -66, 18, -67, -91, 30, 44, -68, 43, 27, -10, 50, 4, -47, -54, -72, -36, -18, -51, 64, 43, -70, -69, -83, 23, 78, 67, -26, -57, -97, -7, 2, 98, -7, -97, -42, 4, 87, -45, -87, 48, 92, -76, 39, -3, 9, 26, -48, 0, 71, 7, -98, -30, -50, 45, -45},
{59, 61, -83, -98, 95, -43, -73, -55, 59, 82, 50, 81, 26, -51, -54, 18, -44, -8, 32, 40, 58, -100, -90, -36, 65, 39, 84, 91, 51, -14, -51, -41, 88, 30, -53, 99, -81, 43, 48, 51, -46, -15, -89, -47, -31, -83, -4, 27, 80, 56, 28, 85, -90, 29, -13, 75, -24, -16, 37, 6, -71, 80, 52, 61, 64, 12, 28, 44, 29, -52, -90, 10, -16, -22, -64, -17, -40, 42, 22, -52, -24, -17, -91, -6, 56, 7, 18, -95, 16, 27, -80, -82, -27, -56, 20, -67, -95, 5, 99, 5},
{-6, 23, 33, 18, 16, 55, -93, -84, 90, 79, -44, -40, -67, -72, 17, 89, -51, 28, -4, 36, -56, 48, 69, -16, 28, -30, -71, 98, -52, -53, 11, 29, -96, 99, -91, 13, 79, -43, 78, -41, 58, 96, 64, 53, -79, 30, 41, 49, -79, 99, -65, 88, 26, -34, 39, -32, -92, -64, -42, 37, 43, 16, -70, 82, 65, 86, 98, 19, 72, -15, -85, -91, -83, 0, 87, -41, -92, 67, 44, 94, -65, -86, 7, -39, -78, 91, 0, -87, 49, -2, -46, 71, -15, -47, 92, -9, 80, 64, 42, 19},
{72, 6, 66, 43, 37, 57, 50, -46, -81, 69, 7, 42, -79, -21, 31, -69, -87, 77, -90, -100, -35, -9, 89, 7, 57, 71, -60, 4, 71, 76, 34, -93, -3, 84, 60, -93, -55, 44, 96, 95, -69, 70, 84, -16, 62, -42, -80, 0, 5, -75, 72, -58, -18, -96, -6, 37, -31, 49, -14, 61, -6, -52, 89, 84, 85, 12, 45, 27, -55, -90, -66, -82, -93, 9, -99, -55, 94, 14, 94, -71, -89, -10, -52, -12, -47, 85, 50, 43, 71, 54, -73, 72, -56, 56, -11, 71, 27, 61, -70, -79},
{-48, 23, 14, -85, -77, -91, -28, 76, 73, 7, -29, 15, -9, -22, -70, 9, -91, 88, -49, -92, -24, -71, -44, -83, -9, -57, 7, -36, 40, 76, 93, -95, 18, 26, 1, 48, -91, -22, 35, -54, 23, -8, 4, 33, -1, 67, 95, -4, -31, 39, -39, 48, -83, -13, -27, -17, 27, 79, -16, -72, 73, 81, 19, 39, -97, 11, 18, -61, 89, 91, 64, -90, 54, -25, -47, -22, -50, 0, -12, 9, -31, -87, -69, -26, 31, -66, -8, 39, 86, 89, -31, 71, -21, -60, -38, 63, 70, 19, 81, 74},
{-89, 60, -94, 2, -34, 84, 11, 59, 78, -39, 2, 24, 53, 78, 88, 51, 14, -44, 63, -36, 54, -30, 56, -93, 81, -21, -55, 8, 98, 89, 91, 39, -96, 29, 5, 1, 47, -24, 53, 42, 4, 70, 77, -96, -32, 15, 34, -31, 53, -90, 45, -30, 87, 47, 82, 78, -84, -9, 30, 21, -10, 63, 94, -81, 35, 58, -56, -24, -22, -25, -82, -50, 54, 79, 90, 40, -59, -92, -61, -13, -92, 59, 77, -64, 64, -32, 66, 20, 65, -39, 4, 87, -44, -14, -77, 75, -25, -64, 22, -40},
{85, 24, 4, 75, -52, 76, 90, -98, 10, -5, 66, -31, 56, -55, 78, -31, -9, -34, 90, 68, -69, -5, -41, -80, -10, -93, -11, -99, 81, -71, -44, -25, 96, -54, 36, 29, 10, 40, -26, -57, -72, 24, -70, -32, 23, -25, -1, -69, -55, 87, -56, 0, -55, -72, 53, 87, -75, -96, -64, -81, 21, -57, 97, -80, 5, 27, -24, -92, 72, 44, -40, -41, -58, -7, -61, 41, 59, 33, -88, 51, 13, 70, -90, -86, 68, -41, -59, -34, -14, -35, -76, -62, -5, -8, -23, 28, -75, -17, -70, 69},
{59, 30, 0, 87, -39, -36, 62, 73, -74, 17, 64, 49, -51, 29, -67, 81, -21, -52, -40, -30, 91, 11, 89, 16, -47, 75, 83, 10, 9, -85, -10, -61, -40, 1, -25, 46, -43, 25, -55, 19, -74, -81, -81, 94, 69, -76, 58, 80, 3, -57, 56, 50, 50, 65, -32, 97, 78, -92, 45, 27, 17, 25, 66, -54, -9, 53, 34, -86, -18, 83, -85, 96, 48, 43, 12, -36, 25, 4, 99, -34, -5, 39, -74, -35, -16, -90, 32, -56, 15, -22, 62, -44, -17, 32, 67, 26, 69, -56, 22, -93},
{-38, -91, 27, 79, 93, -78, 3, 96, -4, 74, -22, -70, -31, -2, 37, 1, -26, -2, 15, 48, -13, 21, 54, 30, 97, -83, 56, 78, -25, 20, 33, 15, -65, 12, -56, 15, 36, -74, 53, -56, 64, -19, -39, -99, -13, -48, -54, 79, 34, 84, -43, 65, 36, 87, -48, -4, 96, -59, 89, -2, 16, -3, 19, 96, -28, 35, -68, -74, -56, 13, 96, -82, 39, 55, -46, -96, -96, -62, -66, -20, 67, 40, -80, -77, 32, -35, 46, -27, -5, 65, -66, -76, 27, -34, -99, -81, -34, -77, -22, 2},
{82, -10, -97, 17, 44, -100, 8, 21, 43, 96, -15, -84, 27, 41, -63, 67, 64, -96, 73, -82, 8, 52, 94, -97, -88, -67, 66, 53, 92, 54, -9, 53, 31, 26, -70, -22, 62, -42, 4, 98, -40, 19, 85, 76, 19, 11, -96, 69, 25, 44, -60, 98, -47, -84, 18, 79, 98, -38, 70, 14, -27, -48, 94, 65, -30, 79, -64, 69, 39, 51, -100, -8, -72, 34, -3, 93, -74, -52, 71, 95, 79, -92, -43, -43, 63, 57, -9, 13, 56, -78, -52, -76, 65, 50, 42, -18, -27, -11, -81, -22},
{55, -51, -15, 17, 15, -53, -41, 42, -52, 13, 90, -36, -63, -3, -48, 91, 63, -95, 7, 94, 19, 38, -35, 55, 24, -44, 67, -18, 78, 64, 7, 90, 0, -77, 75, -70, -89, -28, -100, 42, 99, 43, 75, -74, 10, 36, -50, 92, -73, 10, 36, -52, -88, 77, -48, -60, 74, 22, 62, -46, -9, 93, -78, 96, 52, -97, 50, 89, 23, -22, 89, 31, 3, -36, 53, -59, -86, -57, -80, 89, -50, 65, 95, -33, -28, -54, -36, 77, 82, 36, -35, -16, 64, -81, 19, -40, 52, 21, 32, -35},
{-14, -81, -60, -30, 42, -38, -12, 90, -74, 88, 69, -34, 78, -32, -20, -32, 1, -32, -65, -32, -51, 37, -23, 41, -59, 52, -19, -16, 9, 71, 43, 7, -22, 38, -34, -57, 37, -96, -87, -79, 78, -83, 43, 20, 59, 94, -18, 46, -70, -75, -56, 16, 6, 0, 70, -23, -53, -92, 49, 47, 23, 62, 96, -31, 45, -26, -80, 23, -37, 97, -4, 81, -27, 90, -78, -18, -69, 3, -43, -95, 72, 44, -78, 18, -58, -30, -55, 86, 46, -7, -35, -34, 24, -72, -53, 36, -82, -89, -1, -22},
{0, -69, 4, -36, -3, 71, -14, 64, 11, 44, 30, 77, -36, 41, -79, -44, 19, -81, -91, -74, 93, -79, 39, -58, -18, 61, 70, 13, -69, 49, -75, -22, -56, -28, 32, 12, -100, -95, -77, 42, 37, -79, 93, -7, -56, 81, -53, 18, 8, -3, -59, 66, -5, 33, 23, -21, 30, 20, 39, 0, -92, -95, -56, 0, -83, 93, 11, -47, -65, -72, -86, 72, 59, -80, -42, 86, 6, -25, -82, -45, -72, -54, 60, -3, 90, 6, 84, -48, 71, 46, -2, -100, -73, -41, 6, -67, 15, -74, -17, 75},
{53, 81, 12, 86, -90, -84, 21, -83, -56, 46, -5, -62, 14, 42, -8, 74, 51, 36, -7, -2, 10, 64, -17, 80, 61, 83, 61, 72, 89, 77, 84, 28, -89, 2, -10, 59, -34, 84, -92, -70, 94, 31, 38, 82, 21, -91, -85, 44, 53, -18, 98, 48, 17, 67, -52, -53, 14, 1, 85, 79, 47, 64, -22, 88, 7, 79, -37, 23, -89, -90, -61, 57, 40, 57, -54, 84, 25, 7, -90, 88, -31, 75, 99, -83, 40, 26, -64, -16, 42, -46, 30, 33, 87, -89, -61, -33, -29, 44, -7, 84},
{40, 65, 94, 53, 95, -72, 98, 32, 5, 35, -53, 56, 48, 40, -86, -73, -65, 31, -3, -31, 96, 69, 14, 32, 98, -33, 73, 16, -24, -33, 33, 96, 90, 2, 17, 32, 73, -88, 55, -41, 15, 3, 2, 13, -73, 72, -74, -66, -51, -44, -88, 35, -59, -74, 95, -46, 16, 2, 28, 1, 0, -79, -57, -53, -5, 62, 95, -54, 97, 86, -87, -45, 98, 1, -71, 86, -72, 13, 66, -33, 68, 22, -69, -100, -4, 72, 79, 91, -11, -45, 99, 4, -99, -97, 30, 82, -96, -39, 76, -85},
{-100, 33, 67, 8, 21, -70, 58, -48, 52, -69, -71, 32, -31, 72, -92, 17, 27, -8, 28, -46, -32, 22, -81, -10, 33, 10, -13, -48, 89, 54, 64, -39, -26, 37, -42, 56, -73, 5, 56, -25, -32, 55, -72, -36, 36, 18, -59, 43, -15, 74, 75, -78, 60, 53, -26, 9, -86, -50, 76, 64, -16, -88, 66, -3, -9, -1, 54, 25, -100, 83, -41, 21, 10, 71, 89, 99, 22, -46, -77, -56, 76, -63, -83, 97, 92, 48, 78, -72, 44, -22, -13, 58, 45, -50, 17, 86, 90, 27, -11, -18},
{-90, -15, -48, 32, -34, 30, -60, -33, -95, 5, 15, -29, -81, -82, -24, 42, 30, 30, -6, 79, -28, -83, -47, -51, 5, -63, 2, -21, -40, 33, 97, 26, -44, -86, -30, 66, -94, 59, -80, -78, -81, -2, 21, 94, -26, -31, 55, 3, 55, -35, -38, 19, 67, -69, 91, -84, -82, -17, -8, -28, 56, 42, -12, -25, 14, -80, 24, 48, -26, 82, 38, 79, 14, -53, -9, -23, -88, 11, -83, -53, -68, -88, -38, 52, -55, 53, -15, -57, 46, 58, 13, -15, -93, 29, -61, 9, 47, 32, 86, 46},
{22, 66, 36, -93, -49, 20, 5, -59, -43, -11, -2, 20, -76, -45, 92, -58, 56, 23, 22, 27, 52, -58, 8, 69, -94, -86, -91, -46, -9, 96, -86, 51, 50, 67, 8, 98, -55, 17, -25, -30, -50, -10, 72, 97, -95, -1, 83, -55, -24, 58, -90, 97, 96, 60, -42, -43, -32, -29, 95, -93, -87, -25, -39, -66, -15, -25, 48, 3, -57, -29, -54, 61, 79, -90, -95, -70, -23, 19, 78, -72, -3, 58, -68, -7, -23, 77, -55, -6, -25, -45, -26, -48, 43, -58, -71, 84, -70, 24, 8, 37},
{-14, -87, 9, -39, 63, -83, 54, 41, -3, 71, 10, -96, -97, -98, -50, -99, 10, 72, -27, -97, -46, -74, 94, -90, -93, 69, -10, -43, -94, 8, 3, -3, -25, -68, -45, -11, 60, -31, 39, 50, -86, -36, -54, 1, -15, -87, -77, 53, -17, 99, 25, 99, 7, -4, -47, 94, 19, 23, 32, 21, -11, 58, 48, 63, -99, 70, -98, -32, 43, -40, 63, -85, -35, 99, -82, 19, 59, 72, 42, 40, -51, 74, 84, -36, -94, -73, 31, -96, -64, -2, -71, 14, -53, -4, -79, -63, -49, -27, -95, -33},
{-86, -15, -59, 98, 98, -16, -82, 67, -16, 59, -96, 27, 59, -57, -59, 27, 56, -42, -45, -73, 5, 84, -39, -8, -29, 6, 99, -65, 37, -74, 40, 38, 19, -54, -95, 31, -12, 37, 22, 50, -67, -78, 93, -5, -12, -87, -73, 25, -48, 76, 1, -29, 26, -57, 89, 95, 54, 59, -74, -70, -21, -5, 47, 57, -4, -92, 93, 40, -61, 21, -67, 55, -15, -12, -28, 30, 14, -90, 97, -88, 2, 96, -49, 67, -77, 74, 56, 97, 95, -43, 55, 71, 16, -18, 1, 11, -82, -97, 95, -37},
{63, -72, 19, -35, -86, -14, -39, 43, 43, -58, -76, 52, 65, -84, -23, 32, -79, 12, -59, 60, -49, 76, -92, 93, -51, 47, -7, -81, -94, 72, -33, -24, 68, 33, 17, -84, -8, 84, -84, -97, 65, -10, 54, -31, -3, 48, -3, 56, -31, 78, 83, -41, 39, -21, 73, 24, -11, 49, -73, 7, 64, -60, 85, -69, -61, 93, 56, 54, -51, 54, -80, 13, -56, -44, 84, 48, 23, 14, -11, -33, 6, -93, -83, 9, 46, -59, -7, 79, 20, 61, 51, 57, -51, -13, 68, 71, 66, -11, -9, -98},
{18, -40, 1, -47, -73, -70, -73, 57, 14, 19, 50, 8, 73, -48, -48, -93, -50, 33, -89, -23, 52, 21, 50, 60, -74, -2, 22, -55, 8, -35, 4, 30, -57, -89, -98, -54, 48, -14, 50, 63, -22, 5, -80, -100, 99, -59, -11, -89, -64, 40, 10, 45, 5, -39, 82, -68, -63, 65, 91, -9, 35, -54, 4, -39, -69, -17, 39, 4, 64, 0, 41, -37, 73, 41, -2, 7, 16, 61, 63, 13, 76, -60, 29, 61, -86, 44, -2, -61, 88, 40, 16, -77, 4, -47, 60, 66, -81, -96, -45, 94},
{31, 30, -2, 56, -47, -23, -5, -99, 90, 71, -22, 90, -4, -54, -36, 25, 30, 28, 76, -80, 33, 50, 2, 33, 11, 46, 94, -62, -16, 45, -24, -100, -22, 88, 17, 88, -43, 84, 95, 56, 25, 99, 92, 61, -74, 28, 30, -39, 61, 19, 61, 29, 51, -17, 34, 8, -54, -17, -52, -34, 4, 29, -73, -2, -4, -33, -22, 80, 66, -69, -93, -36, 50, -56, 45, 77, -91, 39, -100, 29, -45, 6, -51, -82, -46, -81, -8, -34, 36, -3, 73, -66, 32, 23, 62, 33, 53, -45, -23, 69},
{-73, 44, 77, -82, -27, 46, 41, 81, 5, -38, 9, -63, 86, -83, -29, -1, 28, -26, 58, 70, 60, -22, -100, -21, 16, 24, -12, -60, 59, -58, 97, -68, -12, 34, 52, -21, 24, 18, 69, 81, -57, -38, 71, 58, 61, -36, -55, 87, -40, -15, 77, -72, -75, -75, -51, 83, -85, 76, 1, -79, -61, 72, -61, 23, -68, -37, -24, -38, 90, -100, -55, -16, 81, 99, -1, -4, -89, 28, 31, 49, 63, 24, -45, -8, 77, -63, 80, 87, -62, 96, 59, -72, -35, 72, 59, -36, -15, 13, -21, 39},
{-50, 83, -98, -4, 56, 29, -12, 90, -34, -46, -64, 0, -90, -37, 72, -50, -18, 57, -97, -72, -3, 79, -32, -9, -15, -36, 67, 95, 31, -81, 64, -71, -46, -17, -61, 20, 74, -26, 74, -20, -38, 32, -38, 58, -10, -100, 98, -46, 68, -39, 53, -52, 86, 21, -61, 71, -1, -66, 35, -42, -26, -67, 91, -71, 76, -29, -76, -91, 93, 22, -63, -63, 1, -99, -85, 66, -79, 14, -14, -24, 85, -3, -34, 24, 89, -57, -8, 14, 3, 34, 26, 60, 0, -36, 21, 53, -61, -32, -39, 16},
{92, 81, 91, 82, 63, 16, 68, -7, -46, 59, -99, -66, -33, -3, 99, -18, -24, 80, 59, -35, 82, -33, 62, 71, -31, 44, -2, 10, 84, 97, 24, -21, 43, -81, -23, -20, 70, 62, 8, 0, 19, 52, -22, -13, 74, 51, 16, -1, 46, -34, 7, -65, -5, 61, 86, -63, 62, -26, -95, -44, -54, -22, 89, 74, -99, -37, 40, -10, 99, 42, -83, -10, 22, 73, 26, -42, 88, -14, -81, -83, -46, -68, 30, 81, -22, 14, 59, -73, 20, 12, 81, 70, -88, -1, -78, 7, 48, 74, 66, -93},
{34, -9, -23, 27, -29, -56, 15, 74, 27, -86, -7, 29, -88, 19, 62, -78, -53, 43, 85, 22, -86, 65, -64, 60, 17, -83, -53, -48, 54, -62, -50, 18, -21, 74, -17, 76, 18, 31, -66, -77, -82, 14, -9, 26, -57, -81, 29, 43, 50, 76, 18, -65, -53, 44, -89, -12, 59, -53, -26, -99, 94, 62, 9, -64, 76, -56, -31, 31, 51, 1, 46, 43, 45, -39, -80, -60, 86, -10, 8, 6, -58, 31, 34, 32, -58, 99, 28, -54, 90, 96, 21, 77, -62, 54, -3, 35, 15, 55, 29, -13},
{-74, 11, 33, 79, -83, -14, 63, 98, -66, -48, 17, 74, -46, -66, 70, -42, 59, 2, -20, 68, -92, -64, -31, 24, -56, 86, 17, 94, -57, -41, 49, 13, -61, 5, -52, -83, -20, 31, 44, 57, 36, 50, -43, 77, 24, -83, 53, -15, -3, -36, -83, 5, -13, 51, 95, 72, -95, 37, -82, -34, 2, 67, -87, 53, 47, -93, -49, 66, -48, -27, 78, -17, 67, 1, -61, -21, -50, -46, -97, -23, 76, -81, 0, -31, -94, -44, 88, -28, -36, -55, -7, 2, 23, 11, 15, 81, 77, 75, -11, -14},
{39, 84, -66, 88, 83, 54, 10, 24, 64, -36, 29, -73, 49, -12, -54, -62, 17, -82, -69, -98, 43, 95, 17, -12, -41, -35, 2, -53, -6, 94, -38, -70, 58, -65, 58, 8, 46, 8, 75, -4, -48, 75, -47, 58, -39, 92, -12, 60, 75, 88, 85, 39, 52, 46, 95, -34, 56, 54, 19, -39, 68, 60, 31, -45, 16, 44, -8, 84, -17, -72, 24, -22, 91, 94, -51, -57, 64, -26, -24, 54, -23, -55, 33, 18, 11, -53, 45, -80, -38, 99, 73, -18, 50, 84, 90, 70, 40, 40, 48, 94},
{10, 98, -29, 44, 84, 49, -10, 50, -8, -82, 77, -47, 7, 44, -96, -34, 32, -26, -65, -60, -34, -67, 25, 1, -29, -1, -88, 18, -2, 27, 5, 21, -89, 44, 65, 70, -22, -7, 40, -79, -34, -89, 77, 51, 44, 30, 76, 90, 98, 38, -29, -1, -84, 5, 39, 19, -100, 88, 65, -95, 22, -37, -10, 90, 88, -97, 88, 60, -53, 13, 45, 44, -32, -74, 76, -54, -30, 0, 63, -100, 70, 14, -41, 16, -56, 97, 18, -14, 77, 71, -52, 55, -21, -21, -2, 45, 88, -72, -62, -43},
{-71, -76, 47, -14, 27, -70, 80, -53, 94, -46, 10, 13, 63, -3, 89, 87, 61, 19, -74, 86, -85, -67, 6, -93, 59, -3, -88, 68, -44, -20, 72, 68, -69, 95, -55, 63, 1, -92, -23, -88, -72, -43, -76, 20, 95, -71, -32, -47, -63, 9, 81, -5, -79, -57, -78, -62, -31, -58, -75, 25, 63, 39, -44, -17, -59, 28, -83, -42, -70, -60, 8, 2, 26, -78, -41, 23, -94, 58, -93, 8, 38, -76, 64, 46, 35, 99, -83, 25, 51, 98, 99, 37, -12, 71, 92, 44, -79, -61, 54, -16},
{-24, -15, 38, -7, 9, -49, 17, 69, 39, 1, 25, -85, -30, -65, 91, -34, -96, -34, -35, 83, -97, 87, -21, -22, -51, 2, -19, -76, 23, 27, -16, -13, -4, 34, -84, -12, -45, -55, 35, 5, 59, -37, -71, 43, -48, -81, -84, 28, 15, -74, 31, 4, -55, -27, 28, 17, -59, 27, 73, 75, -7, -35, -95, 73, -93, -96, -83, -72, 61, 95, 83, 29, 97, -53, -21, -1, 69, -67, 9, -54, 10, 58, -37, -6, -60, -33, 6, 53, -95, -74, 75, 13, -58, -78, -42, 72, -77, -52, -31, -36},
{-68, -62, -21, 94, -5, -74, -51, 66, -62, 47, 61, -35, 5, -29, -44, 89, -82, 31, 70, -13, -51, -12, -96, -6, 95, -9, -36, -8, -78, -51, -49, -77, -35, -28, 84, -96, 76, -15, -49, 27, 73, 54, 27, 11, 62, 32, 50, 40, -38, 54, -73, -67, 55, -13, -51, -96, 86, 16, 9, -85, -8, 41, -46, -90, -55, 16, 79, 79, 71, -7, -66, -1, 60, -63, 94, -55, 3, -19, -80, -73, 59, -58, 96, -74, -60, -57, 21, 98, 57, 3, 92, 42, -13, -94, -82, 24, -20, -31, 40, 47},
{18, -93, 33, -26, 45, -2, -70, 86, 68, 28, 77, -31, 23, -15, 37, 95, 26, -53, -36, -46, -97, -1, -3, -46, -71, 57, 38, -37, -32, -72, -16, 64, 30, -78, -63, 56, 33, 77, -7, -100, 65, 29, 35, -31, -55, 60, -26, -8, -59, 51, -53, -29, 14, 15, -68, -66, -75, 57, -41, 16, -23, 86, -43, -41, -3, 29, -79, -23, 52, -53, -40, -14, 48, 97, -78, -36, -54, 54, 85, 54, 76, 79, 87, -62, 53, -24, -29, -98, 9, 79, -83, 35, 98, -29, -44, -82, -40, 82, 58, 38},
{-90, -71, -20, 0, 84, -26, -24, 21, -49, -42, 69, -8, 77, -72, 99, 52, -15, -10, -87, 55, 74, -45, 91, -23, 20, 2, 15, -30, -80, 80, 20, 80, 14, 71, 65, 81, -40, 42, -88, 97, -42, 73, -55, -83, 97, 89, -18, -25, 44, 80, 24, 53, 49, -9, -82, 97, 40, -99, -31, -96, 20, -13, 15, 3, -92, 21, 96, 73, 21, -90, 54, -85, 29, -68, 39, 68, 34, 66, -82, 9, 5, -36, -43, 99, -46, 18, 69, -93, -94, -99, 32, 57, 78, -33, 45, 75, 12, 5, 33, 0},
{-34, 48, -43, -13, -50, 61, -90, -52, 45, 85, 97, -6, -44, -70, -45, 28, 2, 10, 35, 74, -63, 20, 57, 88, 89, 46, 90, -5, -61, 87, -92, 20, -4, 73, 79, 21, 87, 69, 63, -100, -17, 38, 38, -29, -38, 75, -23, -63, -22, 9, -37, 79, -76, -1, 5, 39, 49, -87, -86, -84, -54, -48, -60, 53, -48, -20, -55, -30, -93, -91, 73, -47, 78, 62, -45, -79, 70, -18, 15, -67, -50, 87, 73, 16, 30, 97, -74, 30, -78, 48, -30, -65, 95, 7, 5, 82, -94, -98, 78, -37},
{96, 16, -36, -74, -10, -33, -4, 5, 72, -42, 5, 84, -91, 94, 5, -100, -77, -25, 14, -71, 79, -32, 3, -28, -9, 5, 23, -88, -72, -76, 20, 38, -8, 34, -34, 14, 64, -26, -40, -5, 80, 0, 95, 40, -30, 9, 40, -14, -87, -6, -12, -23, -6, -28, -99, -42, 20, -63, -78, -9, -7, -64, 99, 69, 99, 96, -77, -8, 77, 77, -64, 12, 94, -76, -69, -39, -33, 10, 24, 83, -5, 63, -48, -7, 24, 12, 5, -79, -70, -80, 12, 39, -17, 49, -67, -18, -37, 52, 58, -99},
{15, 47, -58, -76, 65, -14, -71, 60, -73, -29, -2, 41, -44, 81, -58, -52, -52, -18, 63, 15, -46, 9, 79, 48, -17, 70, -23, -6, 9, -1, 63, -39, 43, -94, -99, 39, -74, -9, -30, 15, -90, -14, 50, 25, 61, -89, 25, -13, 68, -21, 18, 29, -80, 2, -89, 48, -44, 66, 67, -35, -32, 56, 2, -86, -59, 44, -84, -43, 98, -69, 29, -12, 65, 91, -3, 17, -62, 11, -30, 14, -25, -29, -63, -68, -60, 97, 46, -41, -9, 0, -89, -41, -8, 41, -100, -75, -33, -30, 77, 39},
{-31, -57, 26, -69, 4, 59, 1, 65, -8, 7, 15, -29, 82, -14, -56, -67, -34, -19, 30, 63, 96, 2, -56, -57, -21, 81, 87, 76, 94, 85, 91, -43, -54, 55, 55, 62, 44, -100, -63, 24, -2, -38, -38, 59, -96, 99, 14, 9, -49, -60, 34, 9, 71, -82, -43, -72, 52, -4, -20, -77, 51, 84, 35, 29, 10, 44, -24, -25, -34, 60, 40, 34, -69, -89, -62, 48, 61, 59, 77, 86, 62, -16, 35, 90, 8, 81, -58, -54, -50, 85, -56, -69, -83, -95, -69, 86, -27, -68, 33, -35},
{-24, -58, -34, 92, -2, -95, -86, -49, 79, 30, 51, -96, 38, 84, 63, -84, -52, 11, -49, 82, 85, 95, 28, 35, 58, -30, -15, 33, -85, 98, -29, 23, -75, 37, 93, 78, -41, -18, 72, -5, 86, 92, 92, -54, -1, -10, -90, 93, 51, 13, -50, -25, -83, -3, -22, -75, -38, 35, -5, -86, 77, 17, -30, 76, -59, 18, -16, 53, -45, 96, -1, 50, 90, 68, 71, 85, -13, -59, 65, 30, -90, -98, 47, 48, -38, -12, 17, 23, -23, -2, -74, 1, 37, -78, -37, -86, 6, 20, -24, -45},
{17, -49, -13, -54, 71, 16, -73, -37, -36, 72, -6, 5, 54, -47, 50, 20, 57, -95, -49, 60, 96, 71, 98, -55, 76, -5, -97, -29, 30, -8, -11, -1, -12, 94, 8, -35, 35, 85, -77, 0, -53, -78, 0, 11, 21, -38, 20, 61, 69, -48, -38, -13, 6, -17, 2, -67, -17, 3, 0, 65, 22, 37, -56, 54, -46, 95, -24, -34, 54, -36, -63, 9, 5, -45, 79, 80, 51, -5, 67, 12, -92, -9, 90, -82, -89, -43, 33, 20, 31, 96, 47, 15, 97, -55, 64, 39, -35, -92, -9, -43},
{-39, 2, -67, 37, 49, 79, -86, 46, 61, 28, -47, -51, -99, -22, 88, -1, -98, 48, 28, 52, -82, -22, -17, 96, 20, 22, 44, -56, 33, 42, 62, 22, 48, 51, 55, 6, -8, 10, 14, 71, 35, -92, 21, 28, -22, 27, -35, 56, -76, -59, 16, -43, -63, 35, 30, 85, -44, -4, 49, 83, -100, 72, -85, -70, 41, 71, 23, -83, -48, 11, 14, -52, 94, 47, -26, -24, -4, -9, -19, 51, -4, -69, -45, 80, -44, -58, -7, 41, 40, 35, -25, -12, 64, -16, -96, -80, -38, 20, -96, 28},
{-3, 83, 66, -71, -30, 20, 28, -31, -9, -10, -7, 47, 13, 76, -27, -18, 79, 12, -6, -49, 6, -38, -17, -21, -63, 73, -69, -63, -7, 66, -79, -12, -34, 46, 41, -23, -27, 87, -78, 87, 40, 41, 86, -80, 43, 97, 87, 18, -63, 18, 18, 30, 90, -47, -12, -76, 5, 51, 44, 22, 11, 56, 8, -92, -57, 24, 77, 5, 24, 79, 51, 92, 21, 0, -33, -44, -54, 81, -61, -48, -81, 96, 34, 63, 64, -78, -2, -25, 10, 88, 2, -40, -91, -94, 34, -65, 38, 49, 89, -17},
{-94, 72, -76, -73, 75, -84, -88, 29, -79, 74, -2, 8, -3, 9, 21, 91, -97, 84, 63, -34, 79, 19, 10, 64, -13, -62, -47, -78, 7, 89, -72, 7, -4, 63, -45, 49, -37, -75, -80, -44, -20, -55, 92, -64, 2, -21, -95, -82, -70, 12, 62, 19, -67, 98, -63, 61, 0, -97, 77, -5, -36, 14, 13, -25, -34, 80, 5, -46, 47, 92, -89, -46, -37, -40, -51, -76, -66, -60, -77, -58, -93, -29, -75, -96, -18, -39, -46, -38, -23, -38, -70, -3, 76, 64, -96, -58, 81, -71, 42, -17},
{81, 75, 64, -43, 59, -28, 9, -93, -42, -63, 30, 79, -4, -77, 45, 68, -97, -34, 32, 12, -2, 85, -42, -8, -32, -16, 13, -38, 75, -99, 44, 98, -84, -82, -57, -5, -81, 48, 77, -1, -25, 48, 98, 50, -52, -55, -76, -9, -88, -8, 91, 49, -79, 93, -58, 48, -25, -42, -42, 50, 12, -98, 90, -19, 54, 14, 13, -39, -36, 89, 46, 28, 37, 98, -1, -94, -5, -49, 2, 44, 6, 6, -27, -42, -79, 48, 36, -56, 67, -80, -6, -71, 87, 79, -87, -51, 33, 95, -25, -53},
{-48, 68, -27, 65, -93, -41, 64, -57, 21, 92, -3, 10, 49, 40, 10, -26, 36, -94, -93, 53, 9, -79, -47, 28, -61, -87, -35, -29, 81, 44, 3, 10, 64, 52, -60, -9, -30, -22, 76, -50, -70, 4, -9, -85, -10, -31, 29, 85, -4, -83, -56, 90, 72, 90, -73, 16, -93, 6, -1, 24, -68, 36, 24, 58, -89, -86, -64, 22, -75, 10, -44, -37, 51, -34, 94, -4, -13, -57, 6, -11, 77, 25, -41, 75, -37, -10, -85, -14, -26, -27, -53, 50, 54, -97, 94, -19, 95, -10, 57, -9},
{-46, -57, 34, 40, 87, 32, 34, -27, -25, 0, 20, -2, 40, -26, 57, -30, 47, 84, 96, 46, -11, 21, 13, -36, -77, 62, -1, -89, -100, -59, -97, -28, 78, -13, 33, -39, -36, 51, 29, 17, -16, -51, -56, 75, -50, 6, -20, 7, 88, 36, 80, -100, -16, -79, 19, 18, -26, 39, 32, 16, -66, 39, 53, -23, 44, 19, 15, 68, -77, 65, 84, -51, 55, 77, -94, 73, -80, -40, -38, -81, -45, -17, -91, 22, 45, -22, -25, 87, -32, -31, 62, -32, -42, 8, -83, -70, -83, 48, 17, -89},
{-38, 91, 69, 67, -5, 13, -70, 44, -87, 12, -17, -93, -44, -69, 78, 87, -65, 77, 8, -57, 32, 66, 93, 54, 15, 88, 60, -49, 3, -7, -72, -27, -90, -80, -2, -25, 23, -4, 3, -26, -32, 69, 63, 49, -46, 0, -25, -3, 28, 57, 33, 61, -75, -23, -40, -1, 67, -39, -12, 96, 58, 28, 26, -77, -53, 84, 64, -6, -97, -78, 23, -5, 89, -80, 20, -25, 69, -85, 32, -47, 23, -83, 35, 81, -66, 5, -24, -100, 10, -6, -6, -88, -24, -37, 70, -7, 6, -14, 25, 32},
{-77, -31, 91, 17, 47, -65, -15, -44, 78, 22, -64, 47, -71, 36, -96, -34, -41, -21, 9, 3, 11, -51, -11, 58, -75, 20, -52, 8, -96, -68, -35, 88, 85, -22, 67, 3, -77, -25, -89, 32, -34, -98, -76, 43, -42, 41, 77, 52, 1, 62, 64, 48, 70, -48, 61, 70, 89, -55, 38, 45, -32, -76, 69, 60, 60, -9, 40, -36, 19, -56, -47, -41, -58, 59, -56, 28, -4, 10, -18, -61, -3, 66, -74, -49, 0, -75, -87, 48, 40, 87, 16, -99, 73, -71, -62, -3, -44, 24, 98, -72},
{-77, -96, -58, 96, 63, -29, -97, -56, -12, -69, 99, -87, -4, 37, -83, 45, 23, 80, -47, -1, 12, -100, 96, -8, 75, 15, -96, -71, 22, 46, -64, -17, -60, -24, 92, 66, -2, -81, 15, -65, 39, -84, 82, 95, 16, 95, 85, -37, -6, 75, -34, 42, -41, 63, 77, -83, 0, 63, -69, 39, -97, -49, -87, 18, 57, 45, -66, 41, 53, 72, -93, 50, 76, 42, -77, 7, 69, 67, 77, 94, 78, 10, 31, -91, -88, 66, 24, -22, 81, 7, -93, 82, -23, 10, 86, -8, 48, -20, 58, 15},
{76, 41, 49, -100, 93, -62, -74, 28, -26, -39, -53, 29, 8, -26, -97, 41, -78, -21, -45, 57, -9, -100, 67, 72, -30, -46, 38, 12, 44, -82, -21, 27, -58, 76, 90, -3, 28, 2, 29, -11, -89, 17, 26, 1, 20, 71, -22, 1, -91, 70, 63, 85, -31, -8, -34, 51, -23, 80, -50, -74, 52, 23, -100, 3, -94, 13, 98, 18, -9, -82, 43, 39, 90, 76, 52, 15, 52, -13, 67, 13, 20, -53, 82, 38, 75, 34, -22, -9, 45, 64, -78, 54, -78, -70, 36, 15, -26, 75, 28, -19},
{-79, 26, -58, -77, 89, -63, 72, -11, 85, -12, 67, 30, 17, -50, 70, -47, -49, 95, 1, -67, 10, -46, -86, 33, 67, -75, 76, 28, -88, 39, -87, 26, 23, 10, -57, -32, 66, 40, 22, -16, -54, 76, -83, 16, -66, 16, 51, -35, -33, -49, -77, 69, 46, -27, -13, 10, 72, 8, 91, 23, -69, 78, -66, -92, 22, 65, -17, -14, 47, -50, -78, 20, -53, 35, -96, 69, -49, 69, 42, 39, 89, 14, 42, -46, -36, -72, -83, 84, 28, -93, -17, 67, -73, 71, -82, 38, 19, 84, 56, 4},
{-5, -89, -67, -19, -32, -6, -83, -63, 2, 18, -29, -69, -88, -95, -45, -7, 45, 67, -47, -8, 36, -28, 51, -46, -31, 25, 80, -64, 73, 12, -46, -66, -37, 30, -51, 89, 60, 95, -26, 17, -79, 88, 51, -3, -83, -92, 20, -29, 96, -49, 75, 36, -47, -54, 33, 74, 58, -88, 39, -10, -77, -72, -55, -70, -96, -60, -75, 14, -89, 9, -72, -97, 99, 52, -24, -5, -56, 47, 27, 32, 63, -37, 0, 71, 95, -92, 17, 14, 30, -46, -40, -90, 78, 94, -60, 41, -98, 44, -61, 18},
{49, -91, -59, 34, 41, 29, -58, -42, -98, -70, -17, 97, -20, 40, 62, 53, -12, 29, -62, -48, -97, 33, -75, -82, 96, 73, 72, 16, 69, 72, -34, 46, 92, -65, -10, -89, 73, -57, 36, 30, -38, 63, 78, -61, -12, -70, -60, -39, -97, -36, 36, -9, 23, -41, 48, -5, 97, 97, -10, -25, -53, -16, -18, -27, 94, -17, 16, -61, -88, -49, 92, 24, 9, 64, 58, -19, -3, 97, -85, 68, 11, -9, -19, -81, 32, -93, 20, 13, 56, 80, -79, -76, 31, -99, 48, 7, 25, -61, -68, -47},
{-68, -11, -5, 34, 36, -30, -68, -72, -81, -39, 4, 79, -30, 88, -72, -82, -95, 16, -86, -44, -31, -40, 72, -84, -77, -37, 49, 8, -88, -27, -58, -96, 51, -48, -25, -33, 38, 49, -27, -94, 94, 75, -37, 14, -16, -81, -22, -21, -53, 46, 44, 70, -54, 45, -64, 67, 72, 25, 77, -38, -74, 41, -92, -14, 3, -18, 51, -66, 24, -80, -18, 43, -19, -59, -88, 20, 36, -53, -67, 51, -29, -12, -62, 71, -47, -26, 30, -7, 90, -79, -63, 92, 55, -31, 26, -70, -94, 71, 45, 58},
{-63, -62, -98, 30, -82, 94, -55, 81, 79, -6, 75, -46, -2, 78, 19, 46, 70, -73, -81, 17, -88, -7, -50, 63, 80, -14, -15, -10, 65, 79, 9, 44, -87, 56, -68, -30, 36, -45, -7, 68, -73, 81, 95, 99, -56, 49, -45, 85, -83, -47, -86, -53, 90, -11, -28, 8, 13, -33, 13, 73, -55, -37, 21, -75, 41, -8, 5, -43, 93, 30, 57, -80, -20, -66, 54, -45, -65, 55, 66, -54, -90, -86, -70, 62, 23, 93, -17, -94, -47, -39, 52, 10, 87, -5, -54, 65, 85, 72, 56, 43},
{79, -37, -45, 30, -87, -32, -88, 5, -56, -42, -53, 0, 55, 99, 11, -6, -68, -43, -18, 47, -65, 66, 46, 51, 76, 85, 85, -93, -38, 56, 2, -84, 12, 25, 17, -10, 92, 52, -20, -20, -35, 84, 3, 42, 50, -9, 49, -10, -63, -93, -60, 7, -42, 70, 15, -1, -80, 82, -26, -59, -77, -71, -4, 37, -13, -60, 94, 59, 59, 43, -16, 58, 25, 80, -35, 29, -90, 64, 82, 92, 97, 97, 32, -55, 90, -30, 83, -17, 21, -88, 41, -74, -96, -90, 95, -44, 39, 85, 15, -33},
{22, -64, 19, 18, -62, 79, 76, -64, 0, 18, 53, -12, -15, -33, 59, -91, -75, -9, -80, 36, 96, 91, -75, -44, -75, 72, -47, 74, 90, -10, 77, 36, -51, -2, 41, -19, -46, -39, -49, 56, -57, 11, -7, 87, -21, 38, -18, 62, -47, 53, 99, -65, -90, -64, 17, -58, -76, 62, 90, 6, 79, -70, -30, 45, 57, -78, 89, 13, -42, -87, -7, -60, 12, 40, 4, -24, 94, -3, -96, 39, 96, -30, 23, 37, -15, -40, -39, -52, -45, -73, 86, -57, 63, 96, -62, -20, -99, 72, -62, 61},
{63, 1, -25, 97, -10, -58, -20, -91, 29, 14, -6, 53, -51, -24, 86, -90, 63, 73, 66, 21, -1, -15, -100, -21, -47, -52, -8, 46, 27, 81, 64, -85, -92, 18, -37, -70, 54, -7, 63, 87, -30, 15, 88, -44, -64, 33, 82, -21, -60, 16, 88, -35, 66, -100, -65, -51, 74, -80, 78, 34, -34, 18, 19, 90, 47, -37, 9, -70, 44, 9, 70, 89, -25, -89, -63, 71, 17, 4, 90, 97, 5, -27, -7, -58, -15, 21, -39, 52, 19, -7, -87, -88, -43, 20, 64, 37, -19, 88, -83, 64},
{33, 10, 47, -65, -18, 27, 45, 30, -44, 54, 67, 94, 58, 76, 64, -69, 30, -57, -40, -52, 59, 41, -34, 62, -26, -53, -35, 95, 75, 51, -85, 88, -72, -21, -86, -14, -94, 33, -97, 47, 17, -28, 88, -95, 90, -45, -9, -93, 80, -37, 17, -28, 29, 95, -47, -90, -10, 4, -47, 94, -81, 5, 98, 34, 50, -72, 47, 90, -42, 60, -20, 86, 57, -99, -100, 58, 1, -66, 75, 33, 17, -4, -86, -8, 76, -12, 28, 31, 64, -52, -69, -60, -30, 36, 94, -25, 84, 28, 62, -29},
{78, 47, 85, 43, 62, 70, 51, 82, -15, 71, 41, 44, 23, -25, -55, -76, -91, -67, 53, -52, 21, 64, 81, -55, -82, -49, 68, 88, -33, 28, 62, 92, -73, 18, -97, 99, -12, 48, 11, -59, 14, 92, -13, 25, 95, 23, 58, -19, -6, -30, -31, 73, -66, 31, -82, 78, -36, -85, 2, -90, 47, -93, -99, -57, -61, 44, 36, 69, -6, -81, -75, 98, -29, 93, 6, 74, -59, 11, 73, -58, 72, -76, 60, 82, -53, 19, 2, 14, -17, -50, -85, 95, 10, -97, 64, -100, -13, 49, 71, -46},
{-63, -58, -9, -83, -35, 15, 97, -59, 20, 43, 45, -22, 21, -68, 11, -38, -89, 93, -39, -72, -22, 11, 58, -13, -48, -80, -22, 81, -23, -57, -97, -58, 62, -79, 97, -46, -50, -45, -79, 91, 25, -78, 9, -97, -27, -20, 4, 95, -39, -59, 23, -14, 64, 33, -16, 62, 36, 65, -8, -11, 18, 45, 95, 92, -86, 14, -19, -38, 43, 35, -28, 41, -66, 11, -74, 95, 21, 19, 86, 72, -3, -11, -61, 29, -50, -34, 62, -64, -35, -73, -49, -65, 16, -60, -82, -46, -50, 98, 98, 76},
{44, -25, -99, -93, 62, 57, 62, 85, -49, -16, 89, 37, 85, -66, 67, 35, -95, 69, -26, -27, 16, -50, 75, 8, 65, -100, -66, -1, 77, 6, -5, -45, -96, 7, 5, -32, 62, -97, -42, -31, -93, -17, 11, -88, -33, -68, -36, -85, -85, -1, -94, -54, -62, -90, 13, -76, -47, 14, -59, -48, 49, 75, -25, -66, -36, 15, -47, 90, 16, 39, 84, -46, 75, 5, -100, -71, 45, 15, 46, -85, 86, 84, 96, -18, -20, 98, -10, -94, 25, 86, 73, -73, 24, -57, 95, 37, 40, 73, -51, 5},
{81, -3, 8, -59, 19, 11, 47, 62, 36, 99, -85, -36, -90, 97, -55, 40, -94, -50, -55, -49, -78, 60, 56, 46, -20, 75, -67, -96, 81, 3, -45, 57, 86, -69, -98, 0, 49, 46, 35, 50, 89, -84, 18, -81, 25, -22, -30, 46, 46, 44, -88, 24, -44, -80, -33, -36, -4, 84, -96, -34, -23, -39, -65, 8, 85, -19, -52, 11, 80, 53, -46, -91, -51, -31, 96, 82, 35, 25, -97, 51, 90, -11, 41, -52, -16, -26, 70, -59, -72, -76, 97, -99, 53, 2, 13, -52, 89, -54, 39, 56},
{99, 14, -83, -8, -35, -79, -26, 46, 50, 36, -47, -30, 23, -24, 15, 89, 67, 88, -42, 82, 49, -11, 79, -96, -17, -4, -23, -18, 87, 18, -4, 70, 63, 52, 43, -51, -9, -31, 26, 51, 17, -50, -31, -1, 48, 12, -22, -89, -4, 67, -97, -15, 8, -32, 31, 96, 22, 47, -16, -100, -83, -72, -50, -12, -41, 39, -75, -40, 30, -29, -1, -87, -81, 65, 60, -61, -70, 76, 62, 79, -76, -64, -6, -14, -75, -63, 78, -50, -88, -96, 33, -47, -86, 47, 97, 98, 49, -77, -16, -32},
{-80, 38, 9, 47, 8, 97, -2, 56, 35, -60, 35, -42, 78, -20, 44, 23, 59, 14, 55, -7, 16, -43, -56, -22, -79, -85, 9, 45, 8, 1, 26, 20, 91, 53, 99, 61, -12, -19, 84, 67, -71, -34, -91, 30, 88, -27, 61, -100, 31, -50, 4, 49, -70, -71, -7, 23, 32, 17, 4, 62, 84, -92, -16, -51, -34, -51, 10, 16, 32, -42, -54, -49, -25, -77, 21, -75, -24, -98, -3, 27, 2, -13, 26, -43, -48, 87, -99, -71, 12, 61, 42, -10, -25, 31, -53, -12, 87, 13, 30, -72},
{-14, -66, -93, 16, -80, -44, 67, 34, 90, 67, -24, 38, 83, -66, -78, -100, -22, -1, 54, 8, 49, -11, -38, 11, 45, 93, -14, 89, 35, -14, -62, 21, -75, 6, -8, 6, -17, 11, -25, 2, -47, 93, -17, 12, 10, -21, 89, -83, 24, 46, -59, -89, 52, 74, -4, 99, -25, 92, -21, 28, -93, 38, 11, 15, -70, 57, -82, 48, -58, 1, 50, -60, 97, -12, -59, -82, 28, 96, -84, 80, 26, -29, -91, -81, -54, 89, 25, 26, 66, 2, 36, -93, 34, -92, -33, 49, 81, -58, -4, -59},
{-15, -10, 64, -16, 84, -11, -88, -12, -48, -52, 41, -35, -26, 13, -28, 12, 38, 20, 24, 85, -53, 32, 23, 9, -79, -54, -40, -62, 22, -43, -90, -44, -24, 55, -16, -40, 66, -5, 17, -84, 63, -47, 26, 9, 47, 47, -60, -42, 31, 17, -43, -48, -26, -83, 4, 29, -52, 94, 30, 76, 74, 87, -69, 31, 62, -18, 29, 94, 86, 94, 97, -38, 63, -80, 12, 23, -76, 1, 7, 69, 84, -60, -58, -31, 98, -29, -56, -60, 41, -48, 61, -7, -15, 92, 31, 65, 18, 33, 92, 41},
{71, 37, -3, 74, 42, -56, 54, -59, -64, -12, 48, -66, -89, -74, -25, -51, 31, 65, 15, 71, -31, 14, 5, 67, 41, -40, -40, 7, 66, 30, -95, 43, 17, -31, 51, 95, -92, 48, -84, 58, 22, 99, -84, 58, -3, 28, -80, 43, -16, 23, 57, 61, 31, 82, 29, -43, -38, 38, -32, -86, -10, -81, 18, -100, -20, 91, 45, 55, 65, 76, -70, -50, 94, 23, 89, 31, 36, -6, -82, -91, 22, 35, -92, -4, 80, 72, -43, -94, 15, -82, 71, -12, -47, -34, -72, 69, 32, 70, -1, -34},
{-58, 93, 65, -45, -19, -11, -76, -36, -37, 48, 10, 94, 25, 34, 82, -45, 92, -73, -100, 42, 9, -62, 12, 62, 37, -34, 31, 93, 76, 85, -19, -62, -59, 34, 1, -26, -41, -53, 20, 46, -77, -91, 77, 14, -18, 68, -8, 88, -27, 26, 51, -60, -83, 82, -52, -1, -54, 77, -38, -19, -5, -40, -43, -28, 24, 60, 2, -62, -61, -43, -46, 10, 68, -73, -18, -20, 59, 16, 41, -50, -10, -55, 62, -35, -92, -60, 83, -34, 41, 34, 55, 53, 7, -18, 14, -82, -6, 49, -50, -43},
{-11, -75, 99, 75, -10, 15, -24, 11, -58, -68, -23, 12, -83, -73, -72, -22, 33, -7, -48, -76, 31, 39, 60, 91, -57, 10, 29, -57, -64, -87, -42, -14, -48, -73, 53, -54, 42, -57, 87, -44, 13, -46, 89, 40, -29, 94, 50, 76, 65, -42, -94, 6, 93, -97, -12, 62, -74, 48, -35, 44, 94, 21, 24, -98, -48, 11, -32, 10, -30, -59, 25, -36, 71, -30, -48, -24, -91, -53, -54, 26, -38, -88, 58, 44, 88, 39, -7, 68, 67, -47, 9, 71, -69, -96, -80, -68, -28, 66, 20, -89},
{-100, 26, 6, 59, -63, 98, 98, -36, -9, -88, 3, -1, -59, 57, -21, 74, -28, 74, -2, 56, -51, -19, -73, 82, 18, 83, 42, 0, -1, -51, 79, -90, -25, 33, -79, -39, 48, -77, 93, -5, 3, 89, 12, 81, -1, -7, -94, -67, 92, 60, 61, 89, -32, -15, 21, -23, 62, 73, 7, 89, -10, -63, -9, -18, 90, 53, 68, 64, -42, -50, 34, 7, 45, 23, 40, -89, 0, -70, 20, 78, -41, 65, -74, -36, 31, 68, 93, -33, -39, -6, -93, 35, 55, -50, -70, -11, 13, -31, 35, 76},
{99, 89, 25, -66, 98, -9, 39, 13, 43, 21, 45, -84, 68, 97, 23, -26, -77, -33, -29, -14, -14, -72, 55, -29, -91, 76, 6, -88, 82, -18, -60, -73, 24, 63, -48, 69, 30, 16, -57, -13, 32, 59, -92, -35, -63, -5, -93, 40, -27, -21, 4, 68, 50, -29, -77, 49, 75, 46, 36, 26, -38, -97, -100, 53, 51, 3, 36, 94, 55, -69, 76, -14, 93, -13, 47, -45, 86, -69, 53, -87, -28, -36, 88, -53, 23, -74, 63, 55, -3, -62, -93, 58, 3, -15, -23, -35, 66, -38, 87, 54},
{-9, 15, 97, 16, -83, -56, 52, -26, 44, -84, 61, -25, -89, 38, 98, -38, -75, -52, 3, -79, -77, -99, -80, 82, 39, -11, -67, 32, -95, 95, 63, 97, -10, 15, 62, -82, 6, 12, -53, 94, 97, -62, 4, 79, -58, -35, 36, -2, -89, 72, -47, -38, -90, 89, 73, 95, 23, 5, -95, 36, -90, -96, 67, 25, -33, -44, -12, 84, -7, 8, -87, 41, -10, 15, -66, 42, 9, -5, -99, 60, -79, -7, 35, 13, 8, 99, -23, -90, -10, -86, -19, -27, -93, 72, -8, 80, 48, 75, -92, -35},
{-38, 89, 9, -89, -71, -72, 34, -95, 73, 1, 9, -18, -41, -6, -2, 83, 27, -96, -24, 40, 44, 68, 73, 23, 3, 15, -42, 74, -93, 37, 31, 70, 97, -53, -55, 31, 7, -80, 77, 30, 20, 96, 47, -100, 91, 64, 61, -14, 65, -67, -27, -99, 68, 17, 17, 29, -55, 20, -52, -50, -91, -33, -46, -18, 90, 82, 83, 48, 9, -100, -36, 68, -93, -95, 13, 99, 75, 98, 23, -100, 47, 29, -30, 86, -54, 10, -32, 72, -29, -18, 86, -40, -48, 42, -10, 94, -71, -29, 5, -69},
{96, -86, 72, -9, 17, 80, 59, 68, -98, -56, 56, -19, 13, 90, 14, 70, 15, -22, 23, -18, -53, 99, -93, -26, -71, -46, 8, -24, 93, -60, -61, 22, -1, 45, -26, 19, 47, 83, -62, 16, 28, 57, -89, -89, -97, 67, 66, -47, 94, 91, 31, -7, 81, 84, -14, 42, 76, 56, -63, -53, 22, 88, -44, 5, 92, -78, 11, 5, -5, 67, 43, 1, 62, -90, 28, 44, -77, -9, -22, -67, 97, -2, -26, 5, -55, 4, 83, -89, 66, -52, 82, -4, -71, -63, -12, 30, -22, 46, -13, 23},
{-71, -75, 36, -39, 14, 48, -46, 3, 36, 91, 63, 9, -95, 47, 64, 78, -99, 9, -4, 91, -69, 8, -13, 22, -45, 99, 39, 17, -31, 41, -62, 78, -73, -20, -91, -14, -34, -22, 9, -19, -34, -60, 41, -47, 73, 95, 14, 6, 64, -83, 13, 66, -50, -64, 97, 80, 50, -80, 29, -46, -32, 69, 27, 80, 65, 69, -47, -91, 31, 18, 15, 43, -77, 57, 89, 59, 64, 44, 56, -13, -26, 52, 91, -14, 60, 55, -92, 41, -86, 36, -87, -88, 29, -79, 86, 59, 64, -56, 78, 33}
};
int b[N][N] = {{-48, -70, -40, -82, -74, -63, -59, -72, -100, -72, -83, 55, 65, 91, 13, 98, 59, 51, -47, 10, -96, 64, -88, 97, 90, 37, -55, 60, 56, -70, -65, -10, 61, -30, 14, -55, 28, -79, 5, -43, 48, -46, 90, 56, -30, 19, 18, -96, 55, -55, -94, -55, -49, 79, -64, 55, 83, 30, 28, -28, 76, -45, -43, 26, -63, 87, -38, 30, -98, 74, -2, 75, -9, -94, 44, -83, 74, 68, -16, 48, -82, 18, -29, 47, -38, 12, -97, 93, 45, -34, 82, 15, 9, -9, -19, -81, 27, 81, -10, -76},
{5, -84, 28, 56, 60, -33, -42, -50, -83, -83, 34, 99, 26, 64, 64, -28, -23, 30, -3, -69, -39, 4, -67, 43, -100, 1, 96, -48, 36, -58, -95, 22, -98, -60, -9, -87, 22, 27, 75, -95, -70, 66, -37, -47, -65, -48, 14, -73, 31, 20, -9, -22, 54, 68, -24, -90, 85, -63, 95, -100, -9, 74, 31, -26, 74, -64, -68, -21, -28, -31, 25, 58, -45, -37, 91, 36, -32, -61, -83, -86, 65, -44, 17, 36, -13, -59, -64, -25, 0, -54, 53, -23, -54, 26, 34, -94, 91, -51, -46, -98},
{-5, 5, 48, 75, -78, -9, 9, 2, 88, 70, 68, 26, -6, 73, -35, -59, 71, -9, -69, 19, 93, 82, -18, -91, -36, -2, -89, -52, 52, -46, 1, -19, 94, 44, 43, -68, 78, 42, -50, -65, -66, -50, 10, 3, -76, 35, 56, 50, 40, -19, -39, 24, -21, 56, 70, 47, -23, 6, 52, 5, -30, -46, -44, -66, -98, -68, -72, -93, 28, 40, 7, 59, 40, -25, -73, -78, 72, -71, -19, 28, 78, -1, -78, 69, -78, 52, -48, -83, 78, -63, 76, -45, -12, -20, 47, 56, -26, 87, -33, 50},
{69, 23, 66, 66, -11, 50, 67, 18, -58, 76, -37, 71, 40, 37, -33, -99, -6, -90, 68, 57, 31, -73, -36, 5, -53, -100, 18, -100, -19, 70, 29, 37, 99, -64, -25, 29, -48, 61, 1, 27, -48, -89, -50, 80, -46, -68, 21, 11, -32, -60, -8, -95, -23, 64, 85, -70, 70, -93, 58, 52, -10, 47, 5, -64, 57, -80, 97, -3, -4, -96, 53, -78, 80, -4, 20, 2, -68, 74, -88, -38, -62, 23, 64, -87, -65, 97, 55, -84, 52, -74, 61, -65, -17, -65, 71, 69, -64, 48, -82, 64},
{30, 45, 32, 25, -73, 57, -67, -14, 53, -33, -24, -63, -66, -35, -2, -91, 43, 69, -32, 12, -53, 88, 65, -48, 0, 94, -40, -11, 20, -50, -13, 50, 18, -90, 66, 86, -5, 97, -100, 30, -27, -71, 7, 80, 76, 49, 46, 98, 70, -98, -18, -46, 14, -63, -95, 68, -57, 64, -80, -19, -70, -88, -19, -60, 71, -7, -13, 83, 51, -31, 40, 87, 38, -62, 99, 7, -46, -94, -66, -8, 46, -88, -16, -65, 20, 45, -55, 49, 88, -6, -89, -83, -75, 54, 75, 69, 83, 54, -19, -45},
{98, -86, -63, 80, -45, -88, 80, -64, 58, -84, 40, -46, -29, 43, -46, 6, 3, -99, -64, 17, 59, -39, -85, -4, -60, 6, -49, -44, -27, -73, 50, -16, -95, -3, 70, -16, 99, 73, 96, 88, 35, 69, -93, -88, 77, 12, 72, -64, -66, 71, -49, -62, 6, -82, -66, -10, -47, -41, 90, 97, -37, 51, -90, 17, -27, 52, -51, 27, 7, -91, -44, -86, -37, -74, -52, 25, -63, -49, -85, -57, 61, 65, -9, 17, 42, -57, 30, -89, -66, 51, 66, -2, -44, -49, 73, 60, 94, -3, 69, -65},
{-55, -39, -13, -27, -37, 8, -96, 84, -89, 31, -66, -29, -84, -34, -12, -51, -16, -87, 36, 97, -38, 32, 67, -22, 4, 14, -47, 18, 7, 59, 42, -68, -28, 1, -17, -37, 7, 63, -85, -96, -97, 61, -43, -23, 68, 11, 50, -12, 41, 34, -60, 22, -4, 26, -69, 83, -98, -58, 76, 75, -40, 59, 81, 84, 42, -1, -81, -66, -90, 31, -56, -73, -90, -43, -7, -64, -30, -32, 47, 26, -25, -76, 50, -34, -81, 54, -37, -87, 55, 64, 2, 5, 0, 76, 30, 37, -69, -97, -81, 41},
{-82, 58, 81, -41, -58, 36, 76, -79, -29, 23, -97, 58, 73, 67, 35, -12, 8, 87, -82, -75, -79, 58, -41, -75, 29, 31, 13, 19, 54, 84, 47, 95, 18, -3, 32, 50, 88, -45, 91, 77, 33, -95, -47, -62, 14, -51, -54, -78, 30, -47, 94, 68, -85, 82, -45, -21, 24, 40, -36, 38, 52, 45, 36, 14, 90, -19, -73, -28, 76, -98, 18, 72, -30, 73, -58, 13, -50, 44, 29, 57, 31, -43, 91, 53, -13, 50, -63, -99, 39, 93, -63, 28, -31, 78, -16, -29, -23, 25, 61, 39},
{86, -46, 16, -18, 81, 90, 35, -90, 43, 55, -25, 94, -42, 72, 51, -32, 52, 13, -66, -71, 75, 38, -11, -33, -12, -88, 5, -81, -21, 35, -94, 19, 81, 31, 32, 83, -17, 70, -79, 10, 15, 28, -19, 36, -58, 42, 78, 58, 98, 27, -98, 42, 35, -89, -47, 69, -57, 41, 96, -63, -48, -14, 46, -7, -14, 31, -66, 27, 37, 25, -89, -38, -5, 31, -68, -19, -47, -34, 16, 99, 32, -57, 55, 36, -40, 86, -88, -22, -96, 51, -66, -75, 4, 90, 56, 27, 20, -93, 97, -28},
{-38, -19, -40, 82, -76, 57, -29, -2, 79, -48, -21, 75, -95, 79, -21, -40, -37, -85, -96, -9, 88, -61, 84, 38, -73, -50, 21, 61, -92, -19, 45, 32, 86, -17, -50, 23, 75, -51, 0, -26, 30, -11, 2, -18, 44, 2, -43, -51, 34, -10, -42, 26, 76, -3, 15, -40, -100, -100, 52, 65, 99, 37, -47, -96, -78, -24, 8, -33, 30, -83, -60, 94, 78, -5, -70, 31, -21, -63, 59, -27, -11, -85, 4, 38, 50, -68, 84, 36, 74, -55, -56, -67, 98, 60, -36, -57, -13, 3, -56, 78},
{48, -10, 42, -54, -43, -28, 73, 29, -21, -68, -25, -51, -14, 53, 45, -22, -53, 77, 46, -91, 72, -43, -10, -80, -73, -35, -68, -36, -81, -98, -46, 62, 52, 94, -32, -47, -64, 37, -100, -53, 13, 30, -72, 69, 17, 64, 7, 76, -81, 9, 25, -21, 77, 91, -71, -95, 3, 92, -65, 31, -64, -73, 74, -98, 25, 84, 78, 63, 35, 32, 44, -41, 78, 31, -87, -31, 10, 45, -49, 82, 63, 78, 34, -4, 99, -66, 18, 91, -4, -87, 37, 11, -18, -64, 55, -87, -12, -89, -64, -56},
{-12, 31, -25, -93, 97, -67, -93, -14, 52, 27, 96, 30, -64, -89, -99, -40, -63, -53, -35, -64, 79, 2, 65, 79, 67, -20, 3, -100, 4, 63, -81, 46, 66, 21, -100, -53, 78, -31, -59, 16, -89, 24, 11, -47, -12, -28, 44, 17, 64, -6, 48, -53, 94, 74, 16, 48, -61, -59, 1, 18, 67, -99, 13, 73, 9, 45, 13, 35, -40, -100, 52, -44, 25, -54, -4, 19, -40, 26, 91, 55, -28, 9, -55, 97, -42, -66, -50, -42, 41, 5, -79, -47, -51, 59, 35, -7, 66, -3, 4, -79},
{-56, -23, -50, -79, 43, 81, -46, 98, -31, -3, -77, 64, -3, 5, 8, -32, -62, 50, 84, -20, -51, -56, 99, 59, 52, -75, 99, -30, -49, 54, -94, -85, 19, 32, 36, 34, 77, 93, 74, 49, 61, -94, 64, 12, -96, -21, -12, -94, -40, 66, 3, -14, -68, 61, 36, -64, -16, 61, -29, 21, -8, -63, -5, -56, 34, -43, -37, -79, -21, -95, -56, -36, 89, -66, 54, -60, 55, 79, -27, 11, 85, 48, -37, -4, -44, 9, -52, 33, -46, 53, 22, -93, -77, -67, 13, -93, 12, 0, -24, -78},
{-98, 85, 61, 43, -14, -76, -58, 90, 22, -35, 67, 35, -73, 11, 35, 88, 68, -56, -56, -3, -63, -10, -43, -3, -44, -84, 87, -93, -10, -78, 55, -33, -12, 57, -48, -86, 28, 20, -10, 65, -16, 22, -64, 89, 52, -44, 27, 84, 87, 48, 48, -20, 71, -87, 22, -92, -36, -71, 64, 79, 35, 77, 11, -71, -94, -10, -56, 82, 23, -23, 27, -96, -29, 96, 57, -43, 15, -42, -1, -71, -83, 64, -59, -72, -6, 63, -54, 17, 53, -42, -59, 6, 1, 35, -96, -91, 87, 86, 20, 46},
{-76, 40, 80, 40, 70, 48, -35, 21, 71, -30, 25, 48, -95, -7, 1, -56, -48, 47, -59, 19, 90, 27, -74, 26, -91, 25, -71, 50, 12, -36, 87, -10, -56, 77, -70, 52, -33, 80, -20, -8, -44, -21, 47, -29, -74, -75, 47, 57, -42, 80, 82, -40, 65, -4, 0, 91, 9, 93, -48, -31, 4, 96, 62, 47, -60, -40, -88, 76, -34, 27, 64, 22, 40, -17, -17, -77, 98, 91, 25, -15, 69, -57, 71, -37, 96, 55, -88, 87, -4, -2, 26, 19, -7, 89, 52, -13, 25, -45, -46, -15},
{-87, 16, -79, 31, -23, -52, 2, 83, 81, 65, 52, -93, 35, 25, -63, 44, 54, 81, -33, -56, -7, -49, -88, 91, 12, -21, 61, -7, -96, 41, 80, -55, -50, -39, -10, -86, 49, 78, -95, 7, -70, 33, 76, 43, 96, 74, -26, -86, 49, -57, 32, 74, 79, 95, -74, -47, 92, 99, 64, -48, 79, -12, 50, 30, -19, -57, 35, -53, 71, -97, -4, -94, 95, -92, -48, 20, 91, -64, -85, 46, -8, -86, 59, 98, -45, -20, -43, 43, 95, 64, 15, -70, 96, -99, 86, -88, -60, 62, -61, -18},
{61, 49, 52, -77, 95, 95, -77, -83, -55, -13, -79, -87, -23, -86, -13, 62, 63, 71, 55, -37, -15, -88, 89, -69, 52, -83, 69, 40, 10, 14, 54, 50, -57, -67, -33, 0, -89, -88, -5, 86, 14, -23, 38, -18, 23, 49, 29, 47, 72, 71, 81, 43, 36, 93, 3, 83, -13, -48, -70, 77, -17, 35, 30, 36, -85, -6, -17, 41, -3, 55, -83, 69, 2, -19, 8, 90, -11, 7, 60, -27, -45, 24, 9, -87, 3, 10, -90, 77, -96, 49, -79, -93, 21, -19, -38, -91, -26, 59, -45, -7},
{-7, -68, 38, -28, -80, 59, -83, 52, -67, -80, 41, 64, -81, 51, -52, 86, 52, 0, -73, 37, 47, -58, -36, 3, 80, 45, -92, -11, 37, -45, 88, 82, -41, 35, -93, -62, 69, -29, -73, -65, 53, -67, 45, 41, 14, 71, 89, 47, 40, -61, 54, -46, 10, -39, 55, -4, 32, -79, -97, 12, 11, 24, 41, -47, 5, 81, 22, -13, 12, 21, 49, 27, -49, 12, -37, -24, -88, 32, 75, 39, -70, -9, 55, -12, 84, 90, -18, 19, -82, 40, 60, 12, 20, -70, 82, 27, -10, -32, -47, 69},
{-79, 23, -71, -63, -74, -67, -3, 10, 42, 68, 11, -12, -83, 51, 68, -88, 85, -56, 30, -86, 62, -54, 44, 32, -51, 62, 47, -82, 10, -8, 94, -81, 92, 94, -51, 34, 59, 27, -12, 42, 12, 54, 7, -19, -6, -100, -23, -80, -65, -5, 26, -99, 61, 40, 40, -56, 39, -83, 23, 67, -29, -43, 39, -26, 95, 15, 51, 58, 97, -34, 33, 42, -39, -78, -43, 53, -39, 81, 92, -69, 76, -39, -85, 44, -78, 49, -75, 80, -97, 74, 45, -7, -59, 11, -19, 25, -12, 37, 9, -33},
{-56, -12, -87, 7, -77, 81, 12, -21, 49, 39, 32, 93, 54, -72, 64, 47, -84, 81, -92, 50, -27, -44, -94, -10, 25, -9, 97, 33, 66, 67, -91, 94, -94, -93, 67, 1, -60, 77, -8, 7, -99, 30, 86, 2, -75, 87, -60, 64, 9, 64, -68, -79, -77, -29, 70, -63, -20, 23, -69, 71, 99, 95, -9, -63, -18, -71, -34, -9, -100, 9, -55, -5, -35, -4, 95, -42, 29, 37, 65, -79, 27, -34, -48, 87, -29, 75, 94, -2, -60, 57, -87, 34, -80, 14, 50, 37, 37, 76, -36, 94},
{-88, 8, -60, -34, -100, -32, 42, -41, 79, 0, -39, 11, -4, 40, -49, -100, -45, -79, 14, 28, -85, 83, 3, -27, -29, 16, -33, -65, 15, -24, -87, 33, -12, 64, 46, -80, -60, -28, 1, 30, -78, -43, -74, -47, 71, -89, 9, -48, 54, 51, -88, 67, -70, 49, 36, -93, -22, -52, 8, 49, 34, -37, -92, 44, -64, 67, 22, -46, 25, 87, -66, 72, -89, 20, -75, 51, 81, -42, -66, -44, -51, -76, -38, -73, -67, -99, 60, -64, -3, -57, 78, 85, 60, -47, -55, 22, -64, 21, 76, -62},
{14, 80, 16, -54, 25, -13, -65, -38, -33, -6, 28, 10, 14, -85, 31, -49, -56, -29, -100, 25, 10, -72, -64, -7, 10, 67, 56, 56, -88, 13, 77, -8, 48, -14, -67, -74, 76, -59, -2, -80, -74, 99, 21, -96, -69, 81, -66, 33, 89, -17, -69, -29, 65, 23, 51, 75, -65, 11, -66, -59, 37, -75, -52, 53, 78, 64, 47, -28, 48, -69, -57, -72, -15, -66, 58, -11, -98, -34, 78, 92, 61, -78, 92, -24, -58, 43, -35, 16, -38, 75, 31, 16, -17, -12, 6, 70, -64, -21, -62, -28},
{-38, 19, 86, -69, 38, -79, 74, 7, -77, -29, -73, 1, 85, -56, -12, -43, 32, 83, 63, -29, 72, -73, 33, 56, -19, -62, 73, 24, -27, -13, -64, -36, -76, 91, -87, 93, -42, -64, 7, 47, 24, -51, -22, 61, -55, -36, -4, -98, -20, -41, 59, 83, 78, 60, 16, 78, -54, -58, 53, -73, 55, -67, 24, 23, -15, -1, -8, 66, -94, 7, 86, -34, -34, -40, 68, 22, -17, 27, -53, -88, 38, 28, -2, -48, 73, 30, 49, 44, 61, -9, 96, -94, -27, -14, 36, -48, 14, -92, -73, -80},
{-24, 11, -49, 45, 64, -6, -99, 43, 86, 46, -68, -47, -17, -37, -74, -38, 38, -21, 33, 54, -88, 13, 1, 92, -63, 13, -11, 69, 80, -66, -80, -40, 74, 0, -32, -40, -45, 98, 81, 47, -18, -60, 31, -52, -2, -79, -17, -71, 24, -80, 36, 77, 57, -49, -30, -40, 63, 80, -86, -39, -86, 83, -33, -42, -6, -12, -86, 26, 44, -87, 28, -29, 27, -59, -69, 10, 36, -53, -91, 47, -12, -13, -96, 78, 43, 15, -82, -33, 42, 42, 63, 24, -3, 3, 81, 63, 89, -23, -85, -6},
{-53, 83, 0, 14, -37, 21, -39, 27, 68, -82, 37, 72, -69, -28, -44, 57, -69, -27, -5, 27, 49, 85, 97, 21, -53, -33, 20, -38, 92, 50, -96, 5, 52, -28, -30, -95, 51, -70, -93, -35, -9, 90, -24, 15, 39, -30, -24, -16, -43, -73, 7, -1, 28, 58, -67, -6, -40, -61, 37, 58, 23, -23, 7, 32, -31, -56, -51, 38, -75, -84, -77, -14, 47, 73, 84, -35, -37, 64, -45, -14, 60, 56, 79, 38, -6, 67, 69, -98, -17, 53, -90, -20, 13, 95, -8, 97, -32, 66, -100, 56},
{64, 64, -20, -98, -55, 36, 25, -68, -88, 11, -87, -39, 65, -67, -15, 64, -36, 34, -53, -88, -9, -48, 16, 59, -36, 85, -18, -86, -74, 65, 88, 12, -90, 1, 35, -47, -38, 0, 42, -41, -18, 87, 94, -88, -99, -16, -89, 46, 48, 82, -36, 66, -55, -43, 26, -3, -36, 24, 90, -69, -81, -16, -83, -96, 33, 52, 74, -24, 37, 11, 53, 75, 97, -72, 89, 30, 27, -62, 1, -39, 81, -67, -15, -21, 47, -62, 52, -30, -35, -11, 57, -38, 38, -71, -53, 79, -43, -60, -75, 16},
{-38, -27, -28, -32, 93, 92, 28, 87, -41, 63, -88, -13, 6, 63, 51, 4, 38, 32, -28, 47, 9, 67, -2, -92, -24, -36, 13, -39, 83, 3, -93, 0, 36, 7, 36, 77, -2, -66, -97, 54, 18, -29, -74, 55, -40, -52, -83, 17, -16, -35, 84, -83, 39, -69, 51, 26, 7, -47, -66, -52, -81, -34, 49, -6, 61, 58, 54, 79, -17, 40, -1, -44, 67, -55, -78, -52, -7, 83, -50, 80, 41, 8, -83, -7, -50, -13, -97, 9, -95, 24, 51, -79, -61, -61, 86, 1, -39, 75, -99, -17},
{58, 54, -34, -15, 21, -97, 34, -32, 33, -38, -70, 50, -23, -26, -1, -66, -68, 23, -97, -74, 70, 48, -94, 81, -24, 62, 11, 50, 42, 70, -14, -97, 45, 21, -13, 77, 77, -35, -5, 78, -59, -70, 57, -56, 9, -7, 72, -34, 74, 70, -13, -30, -74, 4, -15, 96, 27, -69, 12, 36, 95, 21, -71, 88, -22, -83, -89, 35, 27, -38, -74, -9, 89, 90, 3, 79, -41, 69, -61, -56, -80, 87, -48, -80, -34, -4, -55, 98, -86, 92, -33, 19, -29, 19, 50, 31, 28, 54, 93, 12},
{-91, 4, 0, 92, -57, -12, 55, 90, -100, -60, -75, -76, -57, -14, 53, -100, 11, 20, 58, 82, -99, -35, -71, -13, -32, -17, -97, 51, -14, 39, 40, -43, 95, 19, 94, -41, 23, 3, -65, -14, -78, 1, -70, 76, 94, -88, -94, -10, 51, -42, -37, -8, 46, -8, -58, -62, 0, 93, -4, 51, 88, 76, 84, -1, -71, -68, 80, -69, 76, -40, -46, 86, 42, -63, -47, -20, 3, 88, -73, 27, 97, -47, 88, -44, 12, 34, -29, -28, -49, 55, -99, -2, 95, -52, 25, -69, 34, -48, -27, -62},
{-19, 51, -56, -79, -63, 4, 15, -53, -60, -15, -78, -59, 5, -69, -42, 63, 46, 47, -58, 90, 44, -79, -3, 21, -33, -92, -24, 98, 98, 12, -50, -1, 42, 39, -86, 67, -76, 21, 61, 16, -98, -30, 25, -89, -3, 32, 51, -52, -22, 33, -32, 55, -60, -29, -77, 34, 11, -45, -28, 11, -6, 72, -25, 94, -93, 1, 79, -27, -63, 25, 31, -14, -85, -70, 12, 60, 85, 56, 53, -31, -70, 41, 79, 82, 10, -72, -29, -65, 12, 26, 58, 35, 71, 7, 95, 42, -49, 87, -51, 50},
{-71, 52, 49, 38, -96, -63, 3, -90, -83, -45, 98, 41, 84, -69, -2, 44, 11, 31, -65, -27, 34, 6, -64, 68, 85, -83, 25, -68, -61, 43, 96, 69, -12, -28, 23, -81, -91, 99, -59, -50, -6, 62, 29, 29, -90, -41, -37, 70, -67, 31, 41, -86, -25, 47, -16, -54, -84, 98, 55, -34, 51, -25, -42, -78, -59, -52, -45, -64, 79, 50, 32, 93, 57, -55, -78, -71, 41, -8, 2, -9, 71, -71, 5, 8, -100, -1, 58, -68, 88, -73, 42, -12, 13, -65, 98, -37, -83, 47, -38, 58},
{69, 47, -47, 95, -91, 8, -69, 87, -20, -85, 0, 99, -25, 43, 5, 51, 10, 53, -22, -39, 23, 91, 17, -98, -44, -73, -52, 77, -24, 64, 73, 59, 66, 2, -87, -17, -64, -58, 8, 2, -87, -28, -41, 36, 21, -80, 68, -19, -56, 30, -1, 93, 92, -59, 83, 69, 77, -90, 95, -24, 51, 63, -72, -95, 80, -19, 0, 20, -87, -51, -91, 45, -41, 28, -47, 23, -47, -25, 86, -42, 67, 51, 66, -36, 36, 28, -17, -63, 80, 1, 21, 90, -86, 61, -2, 20, 59, -14, -54, -90},
{68, -20, 64, -2, -66, 30, 76, -65, 87, 44, 67, 3, 91, 57, -56, 71, -43, 67, 21, -30, -82, -84, -27, 37, 99, -50, -99, -55, -5, 81, 21, -93, 57, -44, 44, -10, -69, 9, -39, 17, -68, 79, -28, 30, 31, -90, -84, -13, -4, 8, -78, 55, -43, 10, -86, 31, -2, 84, 90, -10, 77, -22, 74, -29, -39, -38, 30, -11, 85, -91, 30, 98, 54, 51, -52, 70, 97, 72, 66, 93, 75, -85, 77, 96, -92, 15, -50, 19, -100, -47, 67, -74, -76, -12, 46, 22, -10, 30, 46, 82},
{-65, -54, 15, -58, -8, 63, -29, -76, -56, 42, 47, -85, 54, -44, 75, -93, -60, -100, -25, -78, -58, 78, -20, 13, -80, -33, -28, 56, 80, -69, 7, -78, 48, -93, -83, -6, 68, -23, 79, -24, 50, 18, 78, 53, 43, 69, -21, 2, 67, -98, -8, 48, -28, -88, -29, -97, 84, 49, 48, -28, 43, -6, 85, -51, -42, -11, -49, 14, 66, 75, 19, 63, -47, -83, -29, 97, -66, 88, -61, 24, 92, 52, 54, 18, 45, -38, 77, 19, 94, 35, 77, -69, 27, 36, -92, 69, -74, 47, 88, -95},
{-37, 50, 48, 74, 58, -93, 46, -48, -91, 45, -100, 21, 39, 11, -14, 66, -13, -6, -10, 78, 30, 37, -20, -45, 29, -89, -82, -40, 5, 89, -61, -56, 76, 13, -93, -33, 33, 66, -3, -46, 73, -40, 2, -47, -57, 2, 2, 12, -15, -4, -79, 81, 20, -29, -27, 48, -5, 42, -20, -40, 42, 57, 8, -74, -53, 89, 90, 26, -77, -67, -74, -5, 42, -78, 37, 46, 96, 79, 73, -98, -20, 92, -33, -15, -33, 38, -96, 19, 28, 68, 28, -51, 22, 81, 86, -81, -20, -60, -19, 41},
{48, 45, 69, -50, 58, 15, 89, -90, 44, 58, -68, 48, 40, 63, -81, 21, -13, -76, -17, 6, 49, -21, 37, -50, 38, 64, -10, -66, -94, -96, -95, -4, -3, -47, -1, 26, -15, 39, 99, -43, 3, 7, -14, 76, -58, -31, -41, -8, 90, -60, -91, -58, 24, -30, -25, -39, 0, 24, -86, 83, -67, -92, -25, 52, 49, -41, 59, 58, 38, 59, 7, -4, -8, -50, -27, -33, 43, 3, 27, -65, -52, 39, -49, 95, -23, 56, -22, -4, -75, 81, -16, 56, -73, 97, -33, 35, -69, -73, -24, -75},
{-19, -10, 85, -17, -16, 8, -83, 48, -72, 3, 31, 63, -84, 49, 17, -54, 7, -37, -26, 3, 14, -69, 33, -20, -22, -91, -79, -25, 14, -18, 51, -13, -84, 4, -100, -100, 23, 50, 16, 22, 65, 7, -45, 27, 11, 5, 37, -74, -54, 95, -59, -35, 32, 25, 49, 94, 30, -48, -65, 7, 89, 62, 9, -68, -78, 6, -21, 32, -10, -89, -43, 53, -42, 25, 36, 93, 49, -96, -53, 17, 19, -16, -2, 62, -73, 79, -17, 76, -59, 40, -62, -45, 92, 97, 51, -40, -58, -30, 61, -67},
{10, 77, -99, -12, 59, 25, 13, 85, -4, -4, 54, 18, 0, -59, 25, 54, 44, 81, -63, -8, -51, 46, 2, -81, -81, 97, -77, -27, -44, -10, -6, 21, -20, -13, 24, -35, 1, -12, -4, 5, 27, -60, -81, 30, 80, 13, 69, 68, -12, 18, 88, 38, 47, 97, -63, -38, 57, 71, 68, 8, -26, -21, -93, -56, -45, 8, -3, -63, -76, 92, -60, 30, 9, 26, 54, -18, -93, -77, 60, -38, 81, 63, 20, -72, 86, 9, 79, 77, -56, -30, -58, 79, -83, 68, -78, -2, 4, -65, -86, -28},
{87, 79, 25, -92, 16, -28, 35, 11, -93, -66, -87, 85, 94, -55, 87, 60, -49, -6, 52, -51, -16, -74, 26, 24, 21, 14, -57, 56, -76, 49, -77, -57, 5, 54, 43, 26, -70, 99, 95, -59, 85, 55, 59, 69, -82, 0, 80, -32, -68, -5, 30, 54, 27, 16, -72, -6, -35, 94, -34, 12, -66, -23, 7, -96, -28, -82, -27, 15, -22, -74, -7, -75, 23, -14, 35, -75, 63, -12, 52, -34, 44, 30, 62, 70, 33, -97, -31, -60, -100, 33, -71, 61, 65, 20, -54, -55, 75, 60, -23, -18},
{-70, 40, 14, 96, -90, 5, -60, 85, -31, -26, -57, 6, 99, 8, 0, -62, -72, 82, -38, 12, -39, -36, -64, -89, 6, -79, 9, -27, -3, 36, -24, -21, -92, 2, 45, -6, 83, -89, 60, 25, -40, 21, 77, 81, 27, -77, 47, -89, 17, -75, -69, -80, -70, 39, -94, -90, 15, 39, -23, 19, 41, 12, -55, 95, -7, 28, -9, -57, 32, -83, 99, 8, -38, 58, 19, -53, -80, -48, 39, -16, -81, 8, 61, 36, 34, 35, 32, 99, -58, -63, -65, 25, 48, -75, 76, -77, -27, -91, -64, -69},
{-49, -92, -91, -18, 17, 16, 57, 12, 70, -3, 98, -55, -96, -90, 53, 15, 60, -56, -18, 25, 99, -43, -65, 65, -41, -44, 35, 85, 9, -16, -62, 22, -26, -28, -54, -40, -60, 53, -61, -67, -15, -89, 44, -85, 93, 71, -50, 33, -88, 37, 56, -45, -33, -77, 83, -40, -1, 92, -80, 52, -41, 48, 20, 38, 92, -5, -76, -4, -37, 1, -20, -34, 85, 26, -82, 71, 5, 38, 53, -37, -45, -55, -39, -25, 65, -25, -10, 77, 4, -19, -14, 51, 23, 21, -78, 26, -5, -38, 69, 85},
{-34, -16, -41, 84, -32, -62, -79, -50, 35, 26, 8, 40, -20, -37, -9, -12, -86, -81, -67, 88, 73, -92, 20, -9, 82, 17, 74, -55, -89, -92, 9, -87, -31, 0, 87, 9, -33, 7, -20, 47, 20, -44, 22, -96, 61, 88, -38, -2, 37, 38, -60, -63, -79, -53, -53, -33, -42, 17, 76, -82, 34, 12, 12, -68, 62, -22, 22, -39, 64, 48, -46, -18, -10, 49, -27, 7, -22, 8, 35, 43, -38, -97, -58, -21, 25, 22, 94, 48, 56, -46, 69, 88, -14, 41, -64, -30, -89, -65, -11, 63},
{-6, -2, -10, -23, -52, 79, 98, -83, -84, -43, 96, -45, 52, 64, 10, -92, -87, 49, -44, -95, -37, -25, 3, -3, -49, -72, 85, 10, -22, 30, 54, -3, 48, 26, -75, -38, -33, 1, -71, 94, -44, 84, -43, 30, 21, -72, 51, -2, 24, -43, 7, 42, -92, -51, 46, 74, 69, 48, -94, -34, -57, 7, 72, 99, 34, 98, -21, 20, 35, 80, 16, 88, -34, -37, 18, 51, -75, -39, 68, -54, -80, -5, 36, -58, -60, -43, 29, 93, -15, -81, 39, -79, 33, 13, -54, 55, 7, -79, 22, 71},
{90, 19, 77, -33, 22, 21, -91, 77, 77, -56, 6, 94, 55, 61, -69, -60, 12, 41, 77, -45, 98, -36, -29, 51, 87, -75, -49, -41, -65, -64, 4, -60, 40, -91, -7, 20, 44, -48, 77, -35, 2, -90, -39, 12, -59, 16, 77, -83, -10, 87, 94, -73, -56, 7, -66, 38, -86, 95, 70, 24, -92, -39, 49, -46, -91, 74, -95, -53, 85, -78, -22, -39, -86, -29, 63, 0, 40, -40, 45, -20, -88, -38, 61, -34, -85, 18, 6, -11, -65, -44, 9, -74, -77, -9, 54, -26, 30, 84, 50, 90},
{95, 63, -60, 73, 66, 30, 39, -72, -56, -18, -57, 16, 49, -83, -45, 70, -81, 4, 86, -61, -41, 31, -70, -36, -21, 76, -93, -52, -3, 60, -76, 55, -36, -45, -12, 55, 67, -2, 98, 76, -39, 52, 50, 29, -35, 4, 72, -15, -78, -62, 86, -90, 84, -45, -76, -88, -11, -90, 17, 90, 32, 76, -43, -8, -99, -6, -72, -55, 65, -1, -16, 31, 80, 16, -68, 85, 53, -79, -77, 46, 48, 16, -3, -7, -87, 8, -92, -77, 32, -62, 99, -68, 85, -33, 19, -12, 58, 48, 17, -78},
{38, 81, 69, -61, -4, 69, -47, 52, -93, 2, 37, -3, 47, 3, -60, 47, -45, -71, -63, 81, -51, 81, 4, -56, 4, 41, 37, -10, -16, 0, -29, -93, -20, -93, -92, -49, -9, 12, -31, -42, 3, 19, 89, -72, 7, 2, -20, 60, -99, -22, -40, 71, -35, -2, 91, -88, -41, -62, -55, -26, 47, 86, 42, 88, -82, -43, 48, 81, -85, -48, -9, -47, 48, 50, 10, -99, -42, 89, -63, -4, 48, -15, -14, -85, -99, -39, -64, 94, 10, -67, -26, 82, 73, -16, -47, -82, 91, -98, -74, -17},
{89, -28, -89, 13, 15, -54, 32, -75, 4, -33, 95, -37, -55, -85, 87, -50, 95, -43, -7, -68, -32, -46, -41, -43, 41, -75, 14, -74, -42, 82, -7, -23, -41, -53, 4, -36, 9, 24, 50, -15, -43, 32, 3, -18, 52, 10, -51, -14, 21, -88, 16, 1, -1, 46, -94, -8, -54, 87, -13, -38, -62, -63, 11, -1, 60, -91, -9, -47, -13, 91, 35, -40, -88, -18, -79, 39, -80, -50, -49, 15, -88, -61, 38, -54, -56, 74, -27, 61, 86, 37, -56, 70, 56, 48, 21, 22, 40, 41, -94, -92},
{28, 82, 70, 92, -8, -32, 58, 5, 63, 78, 18, 22, -86, -59, 54, 74, -67, -64, -47, 11, 58, 85, 22, -14, -3, 21, 17, 77, -90, -45, -31, -53, 86, -43, -36, 36, -48, 94, 65, -89, 45, -71, -20, 45, 29, -45, -71, -96, -11, 59, 82, 27, 22, 60, -98, -47, -45, 13, 92, -74, -90, -28, -13, 59, -10, 30, 19, -90, -17, -68, -7, 36, -29, 88, -89, -11, 99, 64, 43, -85, 47, 62, 6, -41, -53, 78, -20, 45, 15, -30, 0, -1, -74, 38, 40, 6, -98, 5, 45, -98},
{11, -64, -5, -54, 16, -59, -72, -80, 9, 75, -36, -60, -46, -20, 65, 43, -37, -81, 14, -26, 33, 50, 60, 68, -18, -30, 30, 17, 59, 36, -20, -100, -89, -46, -64, -41, 48, 32, -15, 30, 96, -83, -37, -37, -16, -1, 82, -40, -29, -77, 47, -71, 49, 55, -86, 5, 90, -59, 61, 79, -93, 62, 30, -13, -59, -40, -2, 87, -97, 85, 32, 80, 64, -21, -71, 24, -11, 29, -87, 72, -20, 94, -26, 29, -25, -5, -96, -67, -100, -54, 23, 69, -91, 83, 16, -72, 39, -22, 7, -56},
{21, -6, 19, 97, 92, -95, 66, -21, -75, 1, 21, -59, -45, 78, 26, -3, 14, 24, -78, -92, 18, -19, -8, 16, 74, -89, -1, -40, 72, -31, -87, -2, -39, -84, -52, -50, 42, 7, -8, 3, -60, -34, 19, 98, 16, -7, 37, 60, 18, 85, 5, -63, 67, -67, 67, 81, -97, -97, 25, 17, -80, -25, 6, -41, 64, -6, -68, -32, -73, 62, 90, 6, 43, 71, -86, -86, -98, -5, -22, -16, 2, -36, -38, -15, 86, 88, -5, -27, 7, -90, -64, 7, -81, -1, -40, -9, -34, -51, -60, 23},
{-14, 54, 58, 23, 75, 39, -37, -99, 5, 31, 88, -68, 30, 35, 21, 48, 70, -7, -67, -3, -46, 71, 87, 3, 77, 61, 61, 71, -72, 65, 17, -40, -85, 19, -26, -92, -95, 2, -93, 88, 44, -47, 44, 0, -64, -75, 30, 93, 91, 45, -19, -51, 88, -69, 9, -16, 22, -86, -34, 42, -17, -92, -96, 10, -83, 16, -36, -10, -31, 99, -55, 35, 73, 85, 67, -6, 98, -85, 59, 2, -64, 79, 37, 4, 43, 37, 39, 8, 74, -44, 25, -4, 56, -22, 41, -57, 52, -70, -56, -5},
{42, -20, -43, -2, -67, -72, -92, -66, 88, -69, 97, -42, -98, 90, 75, 38, -78, 51, 58, 66, 8, -46, -29, -19, 4, 88, -8, -97, -13, -8, 84, 32, -100, 90, -63, 2, 3, -37, 48, 86, 61, 54, 74, -1, 4, -24, 74, -54, 95, -15, -3, 31, -53, -21, -58, -52, 93, 61, 12, 32, -95, -44, 20, 6, -57, 1, -17, 97, 30, -22, -54, -68, 85, 10, -93, -82, -97, -5, -19, 92, -50, 21, 81, -84, -1, 87, -23, 37, 66, -36, 94, -11, 8, -74, -10, -81, 67, -74, -89, -41},
{-59, -93, -82, -15, -4, 9, -69, 92, 35, -18, 40, 18, 93, -45, 38, -34, -35, 55, 70, 72, 42, 9, 84, -83, -28, -52, 52, 20, -86, -46, 94, -63, 95, 98, 36, 84, 56, -96, 94, -89, -27, -69, 30, -25, -70, -99, -49, 39, 34, 15, -40, 49, 92, 56, 27, 57, -17, 29, -9, -39, -13, -50, -47, -12, 28, -89, 3, -95, -34, 86, 85, -3, -16, -67, -69, -50, 9, 60, -10, 3, -96, 59, -74, -42, 81, 89, -7, 38, -35, 53, 70, 19, -44, -58, -68, -31, -89, -53, -4, -18},
{-46, 48, -38, 25, -90, 76, 38, -41, -22, -56, 51, -2, -7, 53, 55, 71, -89, 9, -95, 5, 68, 95, -20, -48, -39, -31, 62, 27, -35, 97, -32, 34, -13, -43, 81, -40, 96, 60, -85, 88, -39, -60, 77, -20, -100, 67, 98, 0, -52, -18, -28, -17, -45, -50, -93, -50, -53, -7, 62, -80, 6, 83, 93, -6, 93, -77, 75, -62, 1, -48, -22, 29, -3, 3, -1, 74, -38, -86, 93, -51, 89, 56, -18, 95, 39, 95, -46, -5, 47, 62, -27, 57, -53, -5, -68, 31, 20, 37, 37, -11},
{-16, -54, -90, -11, -8, -40, 40, -95, 41, 32, 97, -2, -46, -76, 20, -80, 3, -6, 59, 74, 86, -27, 56, -82, 31, 26, 17, 51, -88, -33, 93, -60, 5, 61, 17, 72, -73, 34, -25, 37, 59, -60, -60, 52, -30, -12, -42, 12, -38, 32, -34, 38, 1, 80, 30, -13, 33, -30, -30, 77, 46, 9, 93, 20, 51, -10, -40, -86, -47, -10, -36, 77, -91, 22, -78, 24, 64, 26, 59, -32, -97, 28, 87, -75, -11, 76, 96, 3, -100, -63, -23, -4, 47, 3, -80, 68, -18, -13, 43, -38},
{31, 38, 43, -63, 72, -30, 39, -57, 88, -4, -29, 84, 13, 75, 35, -59, -73, -50, -23, -35, -35, -1, -46, -57, 93, 56, 56, 22, 64, -70, -62, -78, 7, 87, 11, -66, -56, 32, 79, -54, -81, 89, 98, 49, 60, 66, 55, 67, 64, -53, 11, 55, -30, -94, -85, 74, 10, 13, 79, -77, -1, -58, -19, -31, 16, -76, 1, 35, -33, 72, -50, 72, -85, -79, -96, -62, 86, 58, -57, -35, -5, 39, -79, 19, -29, -74, 42, -18, 88, 4, 0, -4, 75, -41, -67, 30, 18, -72, -53, 80},
{90, -60, 57, -58, 29, 38, 93, -31, 92, 39, -96, -43, -10, -85, 84, -93, 54, -89, -27, -91, 4, 85, -15, -82, 34, -94, -74, -87, 0, 57, -76, -89, 64, 94, -72, -60, -45, 82, -69, 22, 57, -44, 44, -97, -2, 29, -23, 56, -33, -22, -41, 80, -100, 59, 15, 49, 15, 12, -73, 4, -72, 3, -70, -2, 62, 45, 52, -12, 92, 36, -67, -15, -57, -92, -35, -49, -98, 3, -86, -18, -17, 98, -91, 39, -63, 65, 14, -81, 52, 32, -56, -85, -10, 83, -75, -68, 49, -53, 72, -36},
{-86, -19, -68, 90, -20, 53, -91, -26, 92, 7, -72, 81, -74, 36, 18, -91, 81, 65, 42, 49, 81, -50, 76, -58, -13, -11, 94, -8, -50, 71, 32, -95, -78, -21, -22, -9, -64, -97, 71, -16, -1, 25, 95, -34, 50, 17, 70, 48, -54, 9, 61, 36, -5, 13, -11, -24, 22, 86, 70, -82, 93, -97, 62, -40, -17, -15, -26, 45, -35, 39, -93, -54, 68, 50, 88, -89, -44, -51, -30, 79, 83, 2, 89, 79, -90, 60, -14, -49, 91, 45, 70, -34, 23, 96, 29, -49, 91, 69, 4, 87},
{71, -64, 7, -37, -12, 82, -30, 88, -32, -9, 12, 9, 99, 89, 31, 22, -72, 11, 97, 86, -13, -52, 69, 3, 25, 86, -60, -54, -23, -54, -33, -38, -70, 83, 0, 69, -58, -3, 57, 52, 46, -27, 85, 29, -90, -77, -4, 25, 63, -90, -70, -98, 48, 87, -49, 40, -23, -13, -64, -23, 92, -24, -11, -30, -38, -33, -41, -31, 21, 13, 48, 22, -81, 92, 78, -46, -27, 62, -65, 67, 13, -5, -91, 32, 25, -45, -49, -96, -8, -71, 70, 93, 17, -38, 40, 55, 69, 31, 18, -40},
{-87, -78, -54, -62, 26, 12, -45, -56, -87, -23, -60, -37, 86, 39, -90, -47, 16, -61, 1, 56, -52, -72, 26, -24, 30, 96, -10, -16, 58, -15, -76, 43, -87, 58, 15, -54, 34, -33, -2, 51, 53, 3, 12, -77, 64, 91, -53, 84, 73, -21, 60, -96, 3, 55, 67, 82, 58, 15, 77, -7, -100, -67, -26, 64, -37, -12, -27, -30, 16, 30, -65, 56, 2, -84, 15, 25, -51, -82, -68, 23, 79, -29, -92, 81, -30, 12, 76, -49, -55, -38, -67, 31, -99, 59, -16, 29, 98, -32, -55, -66},
{13, 72, 68, -28, 96, -71, -75, 12, -39, -40, 6, 61, -55, -86, 83, 57, 95, -58, -42, 28, 53, -17, -31, 58, 71, 81, 12, 33, -72, 52, 48, 63, 43, -41, -27, -93, -51, -95, -61, 53, -14, -60, 33, -41, -75, 24, -27, -80, -55, 22, 71, 45, 72, -58, -82, 74, -66, -94, -9, -20, -23, 93, -56, -78, -55, 60, -74, 88, 59, 62, 31, 85, -46, -15, -91, 18, -26, 40, -23, 11, -41, -9, 28, -65, -85, 21, -15, -37, -98, 41, -82, -51, 22, 62, -44, -73, -3, 4, 2, 69},
{-11, -85, 2, -82, 31, 16, -82, 93, 7, -56, 33, 82, 42, 11, 77, 14, -24, 93, 12, -66, -26, -3, -80, 36, 2, 94, -48, 21, -86, 91, -82, -90, -10, 28, -30, 3, -83, 88, 95, 16, -43, -63, 90, -92, 44, 47, -92, 12, -36, -94, 54, -22, -39, 60, -5, 7, -10, -86, -45, -16, 74, -83, -7, 86, 21, -56, -95, 99, -55, -25, 88, -55, -69, 11, 86, 90, 32, -52, -11, -13, 30, -62, 11, 53, 2, -51, -33, -27, -43, -11, -15, 57, 90, 46, 91, 94, -30, 60, 74, -59},
{-54, 19, -60, 16, 29, -6, 88, 83, -92, -90, 16, -76, 89, -77, -51, 92, -41, 14, -45, 49, 88, 51, 98, 7, -83, 9, -26, -77, -31, 31, -86, -29, 86, -23, 19, 30, 74, 88, -83, 31, 65, -29, -22, -93, -56, 70, -87, -64, 30, 45, -9, 9, 9, 42, 45, -36, -83, -46, 33, 95, 4, 40, 11, -79, -59, -57, 46, 2, -98, 34, -79, 62, -62, -62, 82, 1, 2, 57, 69, 59, -51, -6, 7, -98, 44, 61, -61, 8, -56, -100, -17, -35, -6, 3, 5, -75, 68, -47, -80, 38},
{-4, 86, 27, 64, 44, 97, 70, 17, -63, -20, 86, -100, 77, 82, -39, -33, 24, -56, -48, -78, -72, 76, 86, -85, -83, -30, 52, 9, -24, -20, 64, 98, 4, -9, 6, -43, -63, -15, -70, 99, 47, -98, -55, 82, 55, -89, 13, 60, 56, -70, 17, 97, -28, -18, 35, 1, -45, 83, -86, 74, 79, -58, -2, 65, -94, 17, -18, 82, 1, -92, -2, 20, -88, -94, -80, -47, -31, 95, -51, -78, 8, -16, 9, -3, -17, -52, 67, -62, 75, -38, 28, -2, 62, 65, 57, 72, 82, -92, -74, -46},
{14, 46, 74, 17, 33, -4, -53, -89, 43, 25, -81, -30, -91, -55, -13, -51, 54, -65, -15, -70, -16, 84, -75, -56, 24, 73, 23, -3, -26, 21, -58, 64, -30, -24, -44, 26, 37, 75, -42, -66, -55, -69, -96, -94, -77, -60, -99, -87, -40, 31, 0, -92, 20, 51, -42, -35, 45, 77, 77, 80, -38, -35, -19, -61, -77, -91, 80, 60, 4, 83, -51, 70, -3, -4, -18, -26, -100, 12, -27, -78, -26, -80, -100, -41, -56, 71, -57, -13, -59, -86, -89, 72, 31, -55, 87, 0, -97, -31, -47, -88},
{23, 90, -23, 6, 65, 45, 60, -8, 53, -53, 10, 7, -80, -31, -44, 70, -35, 45, 41, 64, 23, 87, 31, 26, 21, 30, -27, -3, 65, 66, -52, -99, -100, 12, 50, -100, -9, 9, -82, -41, 13, 23, 78, -69, 87, 65, -15, -95, -84, 78, 47, 92, 17, -88, -60, -72, 65, -9, 72, -61, -29, -50, -26, 45, -22, 61, -94, 67, 10, -88, -97, -92, 43, -83, 74, 30, -87, 6, 89, -66, 28, 96, -47, -90, 42, -33, 66, 71, 27, 29, -56, 0, 93, -99, -42, 53, 83, -27, 12, 53},
{-42, 4, -53, -14, -85, -71, -72, -79, -13, 55, 62, -64, -91, -14, 45, 27, 63, -73, -89, -10, -18, 91, -100, 31, 39, 85, -2, 50, -17, -72, 80, 83, -9, -41, -71, -66, -32, 73, 89, 7, -6, 33, -81, -1, -75, -17, 86, -47, 81, -15, -87, -75, -4, -47, -94, 18, 58, -56, -61, -21, 26, -78, 33, 43, 40, -71, -49, 39, -95, 36, 5, -36, -90, 92, 56, -34, 38, 47, -33, -10, 74, 13, -23, 24, 96, -54, -33, -31, 22, -21, -14, -35, 37, -100, -93, 64, -35, 59, -67, 77},
{-4, 87, -63, 93, -29, 42, 21, -15, 71, -85, -69, 12, 60, 91, 6, -22, -5, 19, -25, -57, 37, -93, 44, -31, -18, 98, -37, -90, -15, 20, 21, 47, -84, 0, 30, 41, -67, -70, 93, 97, 83, 88, -90, 73, 51, 92, 95, 92, 9, -93, 88, 63, -51, 50, -8, -31, -52, -75, -92, -42, 95, -12, -7, 54, 73, -2, -37, -14, -46, -41, 37, 73, 38, 95, 0, 63, -92, -63, 32, -92, -42, 71, 67, 37, -53, 19, -23, -27, 94, -34, -74, 89, -19, -11, 23, -29, 56, 58, -95, -3},
{96, 40, -87, -60, 37, 2, -12, 51, -78, -13, 93, 82, 5, -75, 40, 14, 94, 61, 71, 67, -88, -75, -36, 26, -28, 36, 24, 67, 63, -56, -82, -61, 17, 72, 6, 1, 12, 23, -94, -85, -85, -52, 27, -27, 59, 94, 79, -7, 38, -11, 8, 14, -31, 49, 92, -42, 72, -49, -27, 42, 45, 13, 21, 73, 76, -45, -96, -91, -36, -47, 78, -85, 21, -98, 42, 78, -68, 64, -99, 17, 3, 66, 99, -15, -63, -29, 53, 18, 5, -80, 69, -13, 93, -88, -8, 24, -94, -46, -83, -80},
{81, -79, 30, 60, -87, 86, -18, -12, -24, -78, 82, -33, 88, -2, 65, 63, 14, -67, 24, 35, -22, -76, 95, 40, 17, 44, -40, 91, -63, 9, 12, 2, -43, 26, -67, 75, 82, 77, -85, 53, -68, 83, -88, 97, -84, -95, 79, -90, 94, -27, 49, -56, 51, -87, -10, -97, 19, 19, -34, 34, -78, -33, 98, -7, 66, 24, 19, 99, 41, -6, -17, -42, 88, -61, -55, 93, -36, 25, 37, -94, 38, 71, -49, -68, -61, 29, 28, -70, 17, -25, -58, 82, 28, -28, -21, -75, 13, 78, -30, -38},
{-11, 37, 78, -62, -64, -90, 33, -60, -48, 82, 42, -48, 55, 25, 94, -60, 78, -95, -4, 56, 8, 14, 10, -94, -34, 98, 48, 68, -66, -67, -20, -37, -98, 19, -37, -70, -59, 16, -50, -82, -37, 81, -80, -34, 95, -66, 25, -62, -30, 78, -68, -91, -43, 28, 52, -20, -32, 30, 63, -6, -52, 85, 77, -94, 32, 33, 45, 41, 71, -85, 21, -10, 57, -71, 69, -70, 55, -53, 91, 32, -62, -60, -37, -10, -97, 10, -99, -35, 73, 82, 21, -37, 79, -91, 16, -54, -38, -58, -33, 59},
{-62, -1, -78, 1, 63, -59, 99, 61, 19, 1, -85, 42, 85, 54, -31, -73, 35, -50, 96, -44, -10, 96, 6, -81, -20, -87, -81, -23, -56, -91, -2, -24, -81, -53, 33, -21, 53, 12, 85, 88, -96, -34, -38, 80, 27, -24, 30, 63, -69, -31, -35, 88, 75, 81, 84, 79, 24, 65, 88, 96, -13, -55, 77, -78, 22, 24, 91, 10, 17, -20, 66, 94, 4, 80, -43, -36, 53, -83, -78, -58, -17, 89, 83, 45, -5, 53, -64, -45, -41, 37, -32, -88, -37, -45, -79, 35, -85, -18, 75, -2},
{-95, 88, 4, 34, 83, -68, -75, 76, -74, 26, 28, -45, -11, -6, 17, 92, 49, 65, 76, 68, 71, 15, 97, -64, 23, 74, -20, 0, 18, 39, -9, 59, -37, -55, 75, 4, 66, -54, -37, -10, 50, -5, -55, 4, -7, 52, -22, 77, 39, -14, 41, 17, 13, 75, 98, -32, -66, -17, 10, 47, 35, 88, -34, -41, -7, -76, -61, -55, -44, -18, 90, 7, 13, -93, -18, -74, 10, 34, -15, -14, -9, 64, -97, -16, 82, -81, 16, 0, 73, -96, 66, 76, 1, -94, -44, 16, 55, -21, -58, 70},
{-19, 0, -80, -18, -41, -100, -80, 3, 90, -40, 53, 95, -91, -81, 89, 79, -17, 23, -69, -52, 95, 17, -20, -59, 85, 17, 83, 99, 38, 48, 59, 1, 59, -3, 33, -67, -51, -4, -74, -100, 43, 50, -70, -29, 19, -100, -50, -27, -70, 52, -80, -56, -60, 99, 81, -22, -32, -97, -19, 23, 97, -70, 76, 61, -74, 22, -49, -33, -90, 9, 21, -80, 19, 92, -98, 4, 90, 52, 42, 73, 79, 18, 65, -27, 56, -29, -26, -80, -33, -2, -68, 26, -59, 89, -5, -44, 62, -44, 13, -45},
{68, -49, 70, 87, 40, 63, 92, 46, 19, 21, -97, -59, 5, -55, -17, 43, 79, -7, 70, -9, -30, -66, -4, 52, -79, 34, 55, -7, 30, 82, 92, -35, -27, -75, 43, 6, -26, 32, -27, -10, -38, -78, 4, 82, -93, -52, -58, -26, 27, -37, -29, 41, -39, -32, 10, 33, -13, 41, -76, 78, -60, 82, 95, 2, -40, 45, -14, -71, 12, -66, 60, 94, -72, 91, -89, -65, 47, -15, 77, -84, -44, -27, 52, -58, 4, -62, 48, -84, 20, 32, 28, 34, -12, 21, 11, 59, -96, -38, -61, 73},
{32, 12, 96, 61, -12, 51, -87, 96, -92, 20, -92, 91, -84, 68, -39, 2, 5, 78, -52, 21, 86, 5, -39, -47, 72, -7, 57, 44, -59, 80, -94, 99, -99, 16, -78, 38, -87, 11, -51, 43, 94, 53, -76, -24, 62, -29, -57, 35, -99, 98, -60, 35, -17, -21, 63, 6, 63, -39, -39, 57, -50, -5, -49, -58, -67, 79, 28, -70, 13, 44, -16, 38, -85, 38, -58, -48, -24, -10, 30, -16, 72, 89, 30, -37, -19, -77, 63, 16, -34, 58, 2, 4, 10, -43, -22, -97, 57, -46, 16, -66},
{-22, -34, 23, 71, 88, -99, -8, -80, -48, -58, 71, -15, -6, 19, -42, -37, 63, 29, -37, 80, 33, -54, 91, 79, -52, -21, 23, -48, -44, 31, -23, 54, -25, -69, -13, -55, 44, 50, -38, -16, -45, -66, -21, 47, -89, 54, 76, -67, -4, -55, -73, 9, -14, -89, 41, -89, -90, 75, -64, 30, 5, -60, -3, -63, -11, 30, 26, -61, -50, 13, -2, 89, 21, 51, -61, 57, 17, 31, -78, -91, -97, -73, -18, -6, -78, 24, -17, -71, -70, -34, -87, 18, 73, 46, 22, -41, 50, -93, -90, 64},
{-88, 52, 54, -97, -34, 58, -6, 63, 82, 67, 20, -71, -82, 2, 93, -88, -41, -48, -98, 50, 26, 1, -59, 43, -23, 27, -58, -81, -51, 92, -9, -100, -28, 65, -40, -4, -20, 10, 65, -4, -31, 43, -17, -25, 87, 27, 75, -71, -17, -26, 66, -18, 19, 19, 51, -70, 42, -65, -61, -38, -19, -43, -80, -45, 85, 99, -48, 49, 79, 60, 87, -46, -80, -42, 3, -62, -87, 44, -14, -11, -67, -78, -26, 62, 43, -13, -83, -89, 34, -98, 42, 25, -60, 41, 73, 97, -30, -56, -6, 50},
{-67, 19, 31, 92, 51, -45, 87, 53, -98, 5, -24, 82, -75, -57, 37, 8, 36, 24, 9, -63, 11, -42, -74, -71, -91, 56, 40, 83, -80, -64, -23, -69, 71, -68, -27, -55, 15, 87, -82, -27, -45, -36, -29, 13, 78, 53, -54, -80, 41, -98, -25, 50, -46, -17, -42, -49, -10, -40, -34, 57, -25, -48, -52, -10, -22, 55, 39, -5, -1, -83, 90, -78, -13, 46, 60, 51, 18, 56, 80, 7, 39, 15, -76, 76, -8, -68, 66, 15, 92, -93, 17, 87, -34, 6, -6, -43, 32, -85, 35, -69},
{-11, -86, -79, 8, 43, 18, 78, 52, 53, -57, -77, -68, -76, -37, 43, -57, 9, -61, 39, -4, 67, 99, -29, 42, -91, -77, -15, 40, -93, 73, -50, -14, -74, 94, -28, 52, -92, 38, 3, -92, -34, -50, 91, 17, -2, -48, -41, -39, -85, 55, -2, -68, -89, 38, -98, 80, -17, 24, 24, 77, -16, 24, 20, 33, 44, 27, 48, -47, -19, -74, -58, -44, 40, 52, 74, -60, 10, 6, 1, -30, -68, 92, 9, -56, 40, -74, -71, -40, -85, 86, -7, 4, 42, 86, 54, 93, -94, -29, 82, -43},
{38, -43, -29, -60, -18, 32, 57, 32, 98, -5, 27, -56, -75, 52, 35, -66, 97, 44, 61, -41, -33, 72, -73, 25, 74, 30, -87, 38, -58, 50, -48, -98, 79, -30, 86, 37, -76, -21, 17, -72, -20, -51, -15, -64, -22, -92, -26, -17, -88, 46, 86, -95, -52, -87, 44, 13, 53, -30, 49, -78, 96, -39, 45, -25, -50, 8, -91, 99, 49, 75, -93, 18, -98, -46, 98, -17, 7, -36, 94, 61, 13, 85, 83, 33, 2, 78, 1, 73, 88, 59, 4, 80, -8, 67, -12, -66, 2, -24, 9, 23},
{74, -76, 50, 30, 76, -23, -15, 95, -94, 67, 47, -53, 25, -13, 89, 49, -36, -62, 22, -44, 63, 31, -5, -19, 93, 47, -99, 42, -78, -35, 44, 27, 88, 74, -61, 62, -32, 6, 24, -84, 87, 62, -39, -33, -62, -100, 0, 42, 97, 3, -2, 42, 11, -19, 87, 5, 64, 15, -24, 66, -81, -52, 97, 60, -42, 35, -19, -25, -70, 31, 58, -4, -91, -95, -2, 4, -59, -63, -53, 37, -88, -86, -45, 89, 51, -45, 10, -12, 15, 56, -84, 31, 17, -100, 17, -79, 62, 75, -70, -45},
{-63, 46, -86, -82, 28, -53, 39, 54, -50, 72, -56, -51, 82, 76, -8, -3, -7, -71, -70, -6, 75, -44, -76, -25, -31, 94, -59, -77, 23, 39, 82, -3, 84, -60, -21, 25, 79, -28, -4, -22, 95, 82, -33, 16, 57, 57, 96, -29, -14, 46, 49, 23, -95, 32, 43, 70, -66, -22, 10, 95, -98, -38, 12, 30, 97, -33, 0, -24, 37, -37, 23, 22, -10, -89, 47, 71, -37, -49, 68, -23, 62, -36, -62, -28, -95, -92, -26, -15, -16, 17, -93, -15, -26, 98, -30, 12, 24, 98, 73, 38},
{11, 6, -22, 1, 92, 45, -89, -79, -29, -20, 99, 25, -28, -15, 46, 75, 23, 46, 77, -33, 70, -28, 47, -81, -83, 11, 95, -9, -37, -35, 4, 71, -74, 32, 18, 24, 64, -78, 45, -19, -8, -18, 80, 6, -46, 57, 16, 38, 99, -3, -30, 9, -27, -3, 72, 33, 22, 3, 41, -51, -15, 5, -12, -53, -34, -40, -31, 22, 1, 13, 49, -10, -87, 25, 55, -47, 33, 94, 6, 64, 38, -40, 94, -46, 53, -28, 17, 25, 8, 89, 77, -92, -42, -64, 97, -11, -75, -53, -16, -82},
{73, 40, 57, 74, -32, -68, -38, 7, 96, -63, -4, -68, -73, -8, -62, 1, 4, -46, -90, -22, -4, -73, 4, -69, -70, 97, -2, 99, 65, 41, 5, 67, -65, -77, -98, -72, 17, -92, 42, -75, -89, -97, 55, 39, 98, -72, -26, -82, 69, -42, -53, 73, 42, 85, 25, -91, 36, 98, 68, 17, 69, -78, -7, -44, -66, 37, -99, 98, 47, 79, -2, 61, 6, -22, -100, 44, 41, 16, 11, -100, -14, 31, 3, 34, -36, -25, -93, 49, -1, -9, 75, 72, 6, -46, -88, 15, -5, -58, 27, -52},
{-58, -42, 11, -34, 87, -87, 45, -70, -75, -31, -10, 92, -13, 35, -90, 11, -89, -94, 29, -63, -70, -22, 88, 79, 44, 7, 37, 71, 33, 44, -59, 0, 76, -21, 32, 73, 18, -10, 11, 76, -79, -59, 82, -12, -30, 62, -61, -32, -26, -27, 67, 68, -98, -52, -69, 21, -41, 64, -21, -40, -64, -87, 90, -58, 33, -30, 14, -9, 53, 81, 16, 89, 21, 69, 9, 49, 56, 72, 1, 62, -18, -61, 27, -36, 74, -84, -96, -83, -37, 25, 68, 18, -6, -77, -42, 81, 22, -11, -45, -19},
{3, -29, -45, 85, -73, -8, -10, -76, -95, 31, 36, 56, 89, -41, 2, 78, 90, -34, -57, 16, 14, 70, 23, -8, 45, -52, 92, -56, 53, 78, 96, -87, 59, 83, -17, -76, -40, 6, -56, 68, 26, -77, 72, -1, -26, 80, 87, -92, 77, 0, -56, 62, -77, 44, 70, -91, -20, 66, -97, 29, -4, 0, -93, 81, -96, 97, 57, -43, 31, -100, -83, 50, 93, -47, -13, -75, 95, 70, 86, 40, 84, 91, -99, -26, 53, 38, -17, -81, 10, -76, -94, 32, 27, 56, -95, -45, 38, -18, -54, -77},
{82, 21, 55, -55, 16, -38, -77, -72, -52, -85, 85, 94, -31, -86, 85, 15, 3, 85, -19, -25, -96, 76, -65, -19, -8, -12, 18, 52, 11, -45, 8, -85, 10, 74, -13, -7, 39, -30, -75, -90, 99, 47, -15, -43, -82, -56, -66, -59, 16, -60, -83, -54, 54, -66, 71, -100, 99, 91, 99, -68, -36, -53, 91, 47, -44, -38, -76, -15, 28, -39, -80, -79, 61, -45, 65, 29, -81, -68, -84, -78, 18, -51, -3, -76, 58, -23, -49, 97, -85, 24, 95, 15, 81, 76, -21, -78, -65, -56, 10, -39},
{-42, 98, 41, -27, 3, -59, -98, 12, -44, -16, 91, -16, -18, -38, 49, 16, -86, -32, -87, -37, -58, -86, 65, 31, 18, 8, -26, -61, -75, -96, -75, -15, 86, 46, -54, -33, -82, -16, 11, 57, 83, -9, -89, -31, 84, 15, 45, 52, 6, -18, -89, 93, 82, 66, 97, -26, 41, -7, -100, -7, 87, 45, 60, 67, -1, 71, 98, -8, -3, 77, 34, 30, 21, 32, 37, 5, 85, 60, -49, 64, 76, -88, 55, -90, 15, -1, 91, -23, -95, -67, 38, -81, -56, 72, -41, 49, 75, -34, 70, 35},
{-84, -61, -85, -29, -71, 15, 46, -58, -83, 89, -45, -84, -49, -35, -38, -40, 86, -63, 68, 74, 16, 17, 75, -96, -22, 73, -17, -79, -77, 9, -61, 16, 72, 79, 66, -58, 47, -3, -78, -80, -53, -9, 35, -82, 50, 48, 52, 67, 23, -83, -96, 24, 22, 79, -72, 1, 44, 58, -44, 90, 59, 96, 55, 88, -86, -28, 68, 22, 22, 38, -48, 78, 84, -72, 69, -52, 9, 92, 12, 99, -11, -4, 71, -49, -28, 96, 81, -26, 67, -93, -27, -84, -97, 50, 40, 45, 72, 90, -87, 42},
{83, -90, -83, 30, 39, -28, -4, 46, -51, 19, 50, 23, -41, 70, 55, 9, 55, -46, 56, -40, -26, -89, 72, 75, 58, 15, -37, 34, 3, 46, 21, 0, 28, -100, -8, -16, 92, -59, -95, 38, -37, 75, -57, -99, 66, 57, -97, 16, 65, 68, 29, 75, -1, 91, -67, -81, 35, 75, -44, -23, -25, -86, 97, 62, -100, -81, -14, -97, -89, -10, -24, -55, -44, -7, 48, -13, 10, -45, 84, -79, -96, -34, -66, -72, -84, 95, 33, -93, -87, -46, 75, 85, 46, 44, 62, -33, 57, 60, 55, 42},
{-88, 67, 29, -62, 78, 4, 37, 91, -66, 67, -47, -34, 20, 55, 67, 98, 86, 80, -9, -90, -85, 75, 55, 41, -45, -11, -54, -77, -14, 93, 79, -11, -40, 85, 92, 73, 9, -35, -33, 58, 70, 35, -41, 35, -11, 2, -76, 38, 65, 88, -30, 65, -39, 47, -8, -97, -91, -21, -51, 17, -6, 10, 15, -97, -25, -63, 4, -24, 37, -54, -67, -56, 40, -38, -11, -69, 51, -94, -6, -2, 52, -33, -10, 26, -76, 62, 74, -96, -18, -44, 50, -41, 82, -29, -73, 50, -44, 40, -82, -21},
{91, -49, 99, -20, -26, -95, 29, -23, -18, -9, -31, -58, 64, -76, -99, 76, -52, 9, -65, -19, -69, 33, -45, 75, -38, 99, -88, -92, 28, 10, -60, -75, -34, -59, -24, 62, -35, 71, -91, -91, 65, 6, -98, 6, -1, 63, -93, 33, 23, 26, -100, -89, -13, 37, -19, -29, -40, -77, -57, -3, -50, 87, -51, -18, 50, -73, -100, 20, 73, -13, 8, -48, -61, 83, 9, 77, 40, -84, 40, -83, -90, 93, -65, -99, -26, -86, 50, 51, -6, -77, -86, 14, -79, -52, 32, -96, -37, -44, -86, -89},
{-3, -76, -56, 40, 10, -55, -32, 83, 93, 56, -98, 71, -38, -33, -64, -31, -44, 32, -31, 42, 39, -93, -50, -98, 75, -28, -78, 46, -78, -83, -56, 43, 32, 4, -49, -64, 85, 2, 86, -70, 66, -58, -51, 77, 6, -19, -67, 54, 55, -30, -44, 48, 1, 80, -41, 53, -84, 67, -12, -12, -9, -4, -3, -59, -40, -90, 69, -39, 13, 58, 55, 3, -88, 88, 66, 99, 49, -15, -50, -50, 89, 31, 23, -71, 86, -35, -97, -35, 90, 72, -18, 18, 70, -70, -18, -65, -55, -70, -38, -40},
{51, -6, -54, -74, 64, 46, 21, 82, -80, -36, 96, 75, -83, 13, 21, -20, -48, 30, -15, 35, 54, -100, -2, 19, 46, 73, -18, 36, -42, 30, -77, -97, 36, 74, -58, -77, -5, 76, 57, -37, -22, -55, -11, 63, 83, -22, -44, -66, 19, 66, -79, 9, 64, -87, 32, 76, -34, -26, 7, -93, -65, -52, -29, -65, 94, 3, 42, -64, -98, 31, 27, -3, -67, -48, 13, 82, -51, 91, -35, -38, 32, -73, 29, -63, 14, -82, -72, -10, 42, 53, 6, 7, 65, -73, -71, -10, -94, 39, 33, -81},
{-3, 44, -44, 38, -19, -94, -74, -6, 64, 74, 62, -42, -63, -45, 26, 22, -85, 48, -47, -78, 29, -75, -7, -50, 44, 54, 44, -26, 62, 5, 8, -37, -54, 47, -51, 38, 49, -15, 87, -96, -36, -62, 23, 90, -1, -23, -25, 31, -45, -23, -100, -66, -16, 45, 59, 55, -40, 83, 63, 73, 73, -79, -5, -26, 84, -93, -29, -14, -35, 79, 33, 51, -68, 29, -87, -91, -42, 87, 36, 4, 16, -92, -42, -5, -70, -48, -35, 9, 94, 97, -55, 46, 89, -91, -50, 1, 29, 6, 9, -37},
{32, -93, -78, -53, 6, 76, -98, -93, 11, 73, -18, -20, -11, 99, -8, -59, 29, 74, 64, -28, -83, 75, -25, 16, 51, 0, 16, -56, -29, 55, -91, 40, -55, 94, -12, 37, -81, -22, -54, 86, -65, 82, 71, 9, 74, -95, -86, -74, 65, 73, 91, 11, 74, -43, 35, 22, -66, -73, -16, -53, 53, -2, 2, 31, -3, -27, 19, -49, 26, -82, 4, 36, 98, -5, -96, 96, -2, -71, 72, -80, -84, 10, -70, 81, 73, 21, -8, 67, -23, -24, 8, 91, 20, -92, 32, 13, -74, -16, -12, 16},
{-84, -9, 51, 51, -75, -38, -47, 41, 77, -83, -67, -90, -42, -33, 11, 12, 25, -64, 67, 5, 68, -70, 25, -2, -76, 64, 49, -31, -80, -42, -28, -41, 26, -26, 87, 90, -49, -68, 44, -68, 97, 30, 71, 6, 37, -25, -13, 59, 33, -89, 16, 32, 73, -3, -53, 90, 25, 44, 20, 92, 67, 71, 5, 71, -33, -85, 35, 3, -35, 78, 29, -39, -59, -93, -44, -25, -82, -71, -20, 14, 35, -18, -71, 79, 86, 11, -22, -25, 78, 85, -66, 61, -42, 28, -6, 89, 23, 0, -91, 51},
{41, -84, 87, -57, 25, -45, 92, 64, -38, -8, -62, 38, 5, -82, -79, -38, 36, -61, 21, 92, -85, 58, 67, -90, 18, 38, -12, -78, -34, -41, 62, 6, 52, 74, 80, -27, 18, 54, -42, -81, 23, 89, 85, 56, -97, 95, -59, -83, 99, -80, -38, -22, -24, 71, -47, 67, -48, 39, 19, 93, -86, -12, 93, -98, -51, -25, -33, -56, -10, 34, 10, -29, -91, 51, -43, -50, -16, -21, 48, -78, -45, -39, 55, 70, -27, 40, 57, -3, 73, -6, 93, -94, 87, 7, -29, -15, 80, 53, -96, -15},
{79, 64, 89, 2, 9, -3, 96, -16, -8, -76, -27, 94, -92, -7, -78, 93, 55, -11, 70, -89, -9, -14, 63, -77, 13, 71, 9, -4, -84, -67, 19, 91, -13, 23, -77, -60, 46, 5, -100, 17, -20, -95, 57, -90, 95, 63, 25, -7, 38, 73, 3, 79, -56, 11, 17, -37, 72, -9, -27, -46, -99, 35, -25, -57, 97, -22, 35, -45, -54, 28, -49, -35, 63, 5, -89, -91, 29, -9, 25, 22, -44, -21, 62, -26, 57, -25, -2, -69, -50, -97, -52, 77, 9, -15, 8, -88, -36, 7, 30, 38}
};
int ans[N][N] = {{27825, 6208, 14855, -76487, -23589, 13948, 60449, 9292, 5604, -9756, -22675, -45561, 17930, -63936, -12238, -19403, 3315, -15456, 26500, -6732, -22568, -15660, -17943, 17880, 12327, 67980, -59031, -25615, -56993, -63122, 29272, -43311, 45185, -138, 14765, 3049, -56194, 32725, -9215, 3398, 10735, 201, 15258, -6540, 33460, 61218, -49451, -24641, -6074, -57323, 26200, 25857, -2873, 6765, -69796, -3190, -6219, 12269, -43383, -7388, -15272, -3804, 1643, 3712, 10370, 65858, 48163, 37336, 67676, 25072, 38449, 14182, -33513, -28897, 21273, 58255, -44501, 11407, 16859, -2110, -23827, -7322, -2997, -7629, 10701, 20785, 38371, 76015, -10289, -35258, -7572, -686, -14786, 8095, -46865, 33796, 8180, 6614, 31632, -22596},
{24728, 42860, 6504, -26020, -28480, -4432, 9402, -20879, 43593, 3893, 36380, -19315, -18661, 4465, 49295, 24352, 58207, 47135, -44022, -38364, -50011, 7854, -48101, -191, -4184, 30617, -14578, 47336, 30249, 2036, 86239, 25400, -56511, -1418, 6008, -21545, -23766, -36211, -39210, -78582, 5770, 66195, -32411, 24298, 47426, -6569, 24162, 11364, -12508, 20138, 48788, 34961, -2613, 4442, 416, -3717, 50643, 58625, 29040, -71405, 10281, 12989, 31993, -2741, 58627, 1958, -97339, 70169, 36256, 25054, -20986, -28930, 28447, -27485, -21508, -22263, -15859, -46475, 6498, 15912, 10022, -6217, 77712, -12793, -52827, -1044, 15085, 58836, 38816, 4224, -37065, 2424, 32195, 50748, -30997, -37880, -208, 6197, -1199, 23600},
{-7864, 4862, 36193, -28350, 2267, 13134, -29670, -1188, -26205, -1573, 18779, -22588, -5111, -18504, 15025, -4673, 6246, 24553, -38484, 6628, 30552, -51179, -20822, -4465, 27527, -23183, 24406, -18293, 13838, -10791, 70503, -15473, 25099, 42267, -56175, -3227, 12064, -5336, -31589, 15645, 3679, 21006, -8711, -25584, -27344, -682, 9895, -5159, 4003, 2819, -6096, 12518, -3928, -33014, 37010, 30438, 5445, -14248, -12301, -41725, -25035, 3008, -7833, 496, 40231, 47289, 30611, 22098, 23807, 72782, 32747, -1095, -16175, -60021, -38026, -15998, -39375, 58330, -5706, 62452, -15614, -14181, -13303, -42889, -31103, -23452, -23674, 23946, 2555, -3597, 26688, -26466, 26400, -62150, -10123, -49919, -8595, -5459, 23726, 26916},
{-5215, 1811, -46839, 37044, 17737, -15324, 24948, -14754, 29311, -26533, 1608, 70413, 29851, 17935, -55878, 21821, -53769, 17514, 4234, -19678, 18376, -6882, 4440, -11484, 5830, -12431, 5433, -51803, -9833, -4730, -3396, -41555, 31058, -56923, 12157, 28642, -68, 44891, 14971, 60402, 1971, 11205, 774, -16091, 15867, 47825, -1704, 44967, -48334, 37382, 58175, -23846, -8637, -5114, 15322, 6678, -20759, -14593, -3550, 9794, -7989, 14165, 13981, -9131, 732, -25927, 7844, 11662, -24929, -41834, -19874, 14274, 83793, 48665, -10902, 21201, 32168, -43056, 68374, 4655, 11102, 51274, 9540, 5559, -7369, 56556, 30536, 59563, -24064, -74337, -27161, 14329, -115983, 70618, 16251, -10649, 64822, 21573, 9676, 2050},
{4448, 23301, -24856, -798, 65146, 33646, 44106, 10730, 19424, 4108, 4568, -11946, -3608, 1532, -6768, 32504, -9111, -35415, 64794, 2418, 18112, 18016, 55445, -46314, -4912, -3239, 34174, -48998, -43343, 7019, 16020, -777, -16979, -27177, 30883, -16815, -28181, -57480, -8813, 57219, 11223, 28120, -10304, -65475, 65648, -12082, -5178, 41517, -11349, 31302, 54789, 72066, 1087, 14464, -3579, 12287, 40174, -44514, 20368, 30649, 51198, 54158, 48711, 51082, -63781, 29076, 24479, 20230, -20041, -54104, -45135, -18589, 24771, 18374, 22385, -17637, 17054, 7886, 8362, 41143, -68194, 46130, 20056, -27707, -19026, 2044, 7925, -4878, -31024, 47038, -3339, -53154, -25705, 39894, 6913, -17001, 48367, -5092, 47150, 95046},
{-27647, 82312, 34627, 35581, -2731, 17408, 32993, 17564, 30879, 13097, 31540, 4882, -29419, 14526, -20059, -13079, 6592, -50271, -102612, -44385, 81860, 44346, -19627, -5983, -38489, -43096, 58723, 23928, 10182, -21278, -37996, 79545, 49537, 3801, -85809, -33881, -3251, 15276, -35767, 24034, -24114, -84041, -42881, -7004, 4415, -20090, 27248, -34359, 1176, 22387, 93100, 8882, 5727, 4181, 49188, -35291, 23656, -29928, -478, 33541, -16377, 20307, -26217, 10506, 20819, 3933, 45643, -2209, -22863, 825, 7068, 42614, 13518, -28362, -39188, 14601, 5928, 40045, 11058, -52813, 5027, 40970, -13347, 28842, 29220, 1847, 4553, -8269, 11176, -30236, -43218, 11899, -24658, 16307, -1893, 3159, -30690, 9794, -27404, 14554},
{-15204, 9082, 69156, 6075, -5950, -70844, -1364, -31627, 35551, 6080, -18365, 9963, -15145, -23796, -25489, -233, -22554, 6604, -12576, 17576, -44934, 43089, -61511, 2644, 8182, 15619, -29706, -16095, 48678, -42825, -17437, 20479, -4049, 9078, -13801, 36103, 9360, -8698, 52390, -30865, -23607, 26430, 31515, 33783, -46704, -38521, -8169, -10508, -2756, -25774, 34647, -42192, 21773, -17349, -39724, -29441, 14356, 19158, -14066, -15628, -14956, -9789, 13005, -404, -11985, -27287, -47998, 45219, 23113, 54314, 30147, -16265, 8886, 89479, -59662, -5057, -1871, -23256, -53133, -40677, -41462, -9424, -28642, 22862, 16867, 13258, -19792, 65580, 19871, -11989, 3271, 41161, 26000, -39429, -12607, -9448, -69746, 23585, -48580, 22819},
{-38067, -21111, 33260, -24081, 61102, -1122, 2719, 26854, -57145, 13462, -22861, -9335, -15945, 18108, 5314, 6548, -6674, -26412, -1160, 10226, 10442, -16020, 47327, 40764, -13748, 7522, 4155, 52748, 23312, -27954, 18374, 26327, 90422, -17598, -53710, -2975, 7135, -19652, 33143, -1455, 61513, -67512, 19972, -29539, -8655, -13246, -62131, -20161, 39182, -35132, -14179, 55839, -12215, -15266, 5024, 89292, 24847, 7894, -34501, -8984, -40857, -22961, -1184, 16425, -30409, 26143, -9614, 29223, -38457, 44536, 11190, 59034, -79546, -30028, 36821, 10090, -2547, 53279, -22434, 16741, -39195, -49262, -7382, -32172, 6364, 6643, 17498, -1129, 13030, 30247, -2718, -57602, 1505, 66114, -37498, 7720, 7330, 4825, 22665, 34992},
{-13040, -7169, -35939, -41002, -8490, 73182, -11495, 32739, -21361, 42398, -13609, -20252, 35044, -8897, 15556, -27275, -7340, -18361, 22050, -31894, -43549, -53771, 19684, 11269, 2578, -22893, -11600, -17118, -44076, 29009, -22189, -12925, -8355, 19773, 2856, 4547, -16975, -20129, 34144, -12399, -40826, 48212, -7721, 12657, 37191, -21532, -12439, 4907, 46905, 10126, -31241, 13140, -14076, 3589, -30073, -8862, -30573, 4065, -1031, 52841, 49766, -6755, -17594, 7305, 2345, -14057, 2009, -53109, 20387, -33143, -27038, -4871, -60471, -60929, 20054, -15310, -17995, -18818, 27840, 39098, 16453, -59745, 26009, 74980, -72142, -19578, 84555, -103296, 10067, 28048, -23307, -11199, 45188, 21043, 8771, 26828, -38972, 31370, 2810, -28879},
{-7819, 26065, 22829, -78855, 14641, 29824, 2069, -11940, -20485, 50239, -53739, 11312, 50935, -21713, 31181, 31922, 6336, -26098, -30076, -31626, -60898, 82870, 20609, -49821, 24550, -49470, 44250, -15347, 21038, 28337, -30242, -34373, 30111, 28504, 18800, -15419, -2036, 5835, 14767, -827, 45943, 16057, 15101, -26771, -54310, -50524, -16607, -5585, -26840, 6573, -4000, -26215, 551, -20323, 16274, -55699, -11781, -23489, 13384, 14246, -36723, 3708, 5752, -39817, -8147, -4266, 54921, 22544, 6364, -3402, -25291, -45211, 36018, -6390, 29857, -29449, -16579, -16078, 19973, 2972, 37444, 52506, -56580, 60872, 41337, 29341, -5116, -35260, -13171, 48448, -36526, 14204, -1419, 41962, -65848, -37229, 12800, -23013, -18732, -9443},
{4893, -72950, -1055, -6195, -47058, -21336, -12520, 4978, -7127, -24219, 10617, -14071, 26836, -27283, 22610, 13641, 19235, 15339, 12615, 41904, 12418, 7188, -38806, 34215, 216, -17976, 26784, -4748, 52472, -45229, -26324, -47362, 14429, 28124, -15009, 38190, 34556, 32586, -38623, -55767, 14125, -8612, 57075, 11569, -81225, 13930, -11137, -40826, -5674, 17172, -2461, -76290, -18401, 23529, -8361, 12114, 10630, 34630, 28983, -3314, -47247, 52570, 56088, -18024, 2378, -26847, -35338, -25192, 2459, 1231, 3795, -14945, -26318, -23167, 4515, -62958, -27626, 9342, 23564, -2341, -31462, 25440, -32432, 2977, -12274, 66904, -7563, 48603, 2902, 10616, -10552, -6328, -22787, -17457, 24252, -52408, -7714, 43874, -29685, -4159},
{-21397, -10293, 46655, 4238, 17721, -22513, 9946, 42933, -17843, 29663, 39332, -7578, -14042, -11000, 25885, 60, 26947, -81448, -7631, 14520, 36458, -28125, 62830, -25502, -15060, 45898, 23004, -9148, -32940, -61980, 70644, -34934, 32293, -12537, 31343, 34691, 7264, 3584, -20026, 50064, 97510, -45900, -27565, 17226, 16701, 58204, -34204, 61153, 19331, -43069, 4975, 23173, -44138, 16311, 32545, 6304, -36463, 1176, -84559, 26911, -15517, 26713, 47914, -22394, -4233, -30098, 7089, -6248, 35302, 5538, 42121, 20613, -40659, 33535, -20567, -28290, 16619, 29678, 6301, 15869, 5787, 4116, -22697, -56470, 1984, 29364, 29869, -15465, 4292, 26772, 28766, -12524, -15031, 26813, -29305, 37882, 17237, -3573, 19237, 4110},
{-68130, 29729, -27442, 8127, -19331, -5040, -46645, -53365, 33521, 38718, -51253, 7156, -52374, -40597, -2529, 79, -18461, -11675, -60051, -11772, 46766, 48371, 40403, -41099, 26297, -11580, 14585, 9327, -969, -31437, 12623, 58808, -36549, 19955, -1720, 75937, 11518, -13460, 44373, 42987, 49547, -17378, 601, 35442, -9312, -19254, 64776, 33762, 26213, 27552, -30214, -23373, -2770, 15004, -2801, 23969, 11673, -4118, 4940, 87955, 41142, 5617, 14512, 6477, -44184, -15673, 3619, 4786, -42924, 85738, -38839, 35275, 40452, 37603, -38377, -55613, 38868, 8977, -28782, 30879, 21910, 655, 46546, 9826, 26352, 21336, 9462, -12398, -26345, 29719, -18525, -72046, -24843, 34574, -19880, 6230, -30912, 51333, 16484, 17686},
{-47779, 9344, 8669, 43910, -50241, -19458, -60523, 89174, -32083, -52333, 7253, 16672, -16124, -40405, 39775, 77393, -42235, 8230, -14525, 42129, -7479, -62662, -62481, 10027, 14186, 35629, -4043, 24819, 19879, 17025, 4856, -11238, -58424, -18875, 242, -21627, -33153, -22329, 42683, -68138, 15781, 67623, -22271, 60839, 36166, -38277, -57094, 30278, -1922, -33728, -11969, -53922, 7925, -37573, 21599, -41921, -1390, -51381, -2511, -192, 55169, 14329, -4949, 26360, -12233, -9766, -33544, 37622, -51264, -3645, 36158, -76682, -62989, 46560, 19808, -18826, -22620, 56555, -1130, -52700, 27601, -15924, -6963, -34667, 28205, -54901, 38077, -8276, 25780, 15192, -17088, 83911, 4099, -40166, 8914, 11192, -13929, 15057, -55336, 3804},
{14925, -38633, -22155, -14340, -22464, -21075, 28182, -50925, -30392, 17298, 18108, -69836, -8831, 26940, 11899, 23289, 46928, -18856, 23445, -19501, -77018, 2040, 3186, 20294, 15433, -33155, -15446, -20887, 31551, -21595, 52277, -8931, -16919, -29740, 43513, -45801, -47979, -5404, -55745, 40490, -14009, 44828, -7001, 40638, 72721, 49864, 26216, 26893, 39672, -12175, -36608, 72662, -81314, -25745, -66309, -20765, 8520, 23352, -18318, 17682, -16357, -6456, 60760, 30502, -24695, 44519, 41698, -29499, 5888, -703, 16809, 13906, -25487, 24238, -22500, -26141, 59923, 20079, -21623, 51299, -19881, -5395, 74289, -3840, 7453, -33245, 55916, -40785, -13888, 4813, 21515, -28270, 60997, -23681, -23731, 28083, -21695, -8329, -5695, 17905},
{-23322, 13690, 1003, -27983, -8335, 17414, 67696, 25654, 31714, 64054, -15037, 10902, -15883, -24168, 62686, -24841, -45052, -15869, 19351, -632, 92424, -23621, 17249, -18790, -22316, 28854, 22561, 16798, -44706, 63405, 10308, -56968, -16740, 35885, -11030, 13971, -30015, 33265, -11874, -52643, 9434, 13056, 19217, -13833, 36142, -14693, -17910, -36234, -84848, 12492, -11115, 965, -87, 42222, -22269, 25918, -37592, -9294, 8361, -32508, -1741, 16389, 37656, 28343, 87798, 23150, -5225, 14074, 1059, -55955, 19365, -24856, 977, 9539, 15558, -3132, 30050, -5772, 26791, 39756, 25166, -63890, 17762, 33823, -31388, -8669, -3771, -8247, -17160, 38283, -65163, -3018, 13733, 83605, 9098, 32376, -53400, -11671, 80416, 9297},
{-19821, -57946, -46795, 31764, -16391, -65357, 47367, -34978, 46345, 33166, 46431, -67205, 187, 27329, -19213, -26640, 24734, -73179, -59766, 44736, 31958, 28250, 15787, 27239, -33517, 16900, -10115, -8660, 15032, -63927, -14080, -13515, -13446, 21299, -9277, -8200, -25284, 64903, -28260, -9625, -19251, -61131, -4443, -6900, -3227, 16835, 14690, 39420, 24713, 29810, -46721, -37692, 8376, -24049, 6313, 17496, -36612, -24276, 20887, -984, 14869, 17698, -13182, -46538, 30084, -29386, -22198, -292, -53174, 53238, 8908, 54171, 26141, 21678, -48827, 14015, 34682, -4726, -34881, -31186, -57765, 11312, -87570, 16465, 26644, -11085, -18616, 13315, 18834, -53477, 8881, 41615, 23938, -27633, 1579, 33647, -24881, -26953, -12198, 42056},
{-17099, -16268, 6993, -56135, 23730, -21548, -5269, -26230, -3173, -8743, 10245, 2685, 54851, -39337, -27603, 5010, -1030, 53371, -30735, -16962, -32535, 1072, -29359, 43480, 17078, -37284, 49783, 13659, -9453, -27464, -49663, -1805, -43247, 31291, 18005, 57077, -58023, 23477, -5059, 4904, 9401, 39223, 53374, -15581, -2277, 35619, -20043, -1333, -20691, 22868, -2481, 10205, -27794, 6088, 17447, 28682, 2894, 48429, -22903, -13101, -9656, -13291, 3809, 35104, 23625, 19591, -21752, -25125, 13943, -14733, 21416, -57344, -14755, 7388, 4320, -11275, 5819, -51812, -17794, 10135, -13162, -28635, 19104, 83160, 8693, -53945, 29269, 21632, -11848, 10175, -16396, -17866, 1285, 10790, 17586, -8201, 34816, -16666, 16452, -42670},
{35031, 4428, 6802, 16441, 6698, 89144, -29567, 62738, -10094, -13399, -28763, 45810, -16980, 44971, -1334, 49348, 12125, 44685, 19696, 20499, 27214, -40844, -158, -45176, 28209, -13061, -18167, -25914, -7203, 3495, -24100, -21550, -36434, -17481, 27739, -10149, -17596, 8685, 72127, -31357, 924, 29646, -21606, -12015, 17299, 5251, 39561, -7103, -27020, 53729, -8166, -11229, -732, -27827, 7661, 1960, -32796, -33196, 24095, -6275, 4078, 6275, -11116, -29355, -20409, 15915, -6642, -37920, -22401, -15372, -21447, -45138, -38531, 39701, 27663, -30914, -21693, -31639, 23969, 61540, 71961, -48689, -2244, 57237, 10108, -29873, -42729, -49366, 7882, 39513, -34135, 27117, 15699, -6478, 13155, -27598, 16677, 5967, 7566, 25653},
{-18657, -55019, -44381, -57155, -29042, 6237, 70298, -61415, -49192, -34525, -34868, -43468, -19781, 6431, 30431, -77349, 46223, -54202, 46164, -47586, -17561, -41814, 64540, -12930, -53292, -22686, 1760, -3656, -60422, -35063, -25678, -22274, 21545, 25498, -11012, -27766, -1016, 33490, 25798, -37208, -6407, -2742, 54312, 6866, 44582, 55510, 26714, 16466, 18468, -17678, 8772, 29026, -12904, -335, -39029, 39299, -6486, 71825, 16507, -20856, -37334, -18107, 50113, -35790, 37586, 3161, 24094, -26165, 16141, 31801, -54654, 53233, -31246, -62049, 17612, 23062, 9235, -61687, 18820, -35283, -6645, -31137, 29563, 11745, -10863, 26194, 10485, 29738, 38654, 63559, 12010, -48009, 40624, 91468, -19138, 7266, -12979, 8316, 18964, -10114},
{-18107, 5216, 1673, -31636, 66547, -65076, 19947, 52644, -36119, -10628, -30980, -40486, -24826, -53017, 29943, 4061, 228, -7879, -31786, -52615, -7782, -43715, -18301, 30887, -39754, 3409, -47894, -51963, -11011, -3661, -26554, -31396, 6073, -8351, -31131, -21868, 58394, 38561, 25979, -30892, 46329, 18098, -45040, -43110, 37927, 11730, -23844, -18114, 20105, -37679, -24093, 50748, 67271, 55159, -10226, -22121, -8077, 24396, -25112, 18861, -26645, 9767, 13354, 10290, 15352, 26907, -11554, -13394, -32993, -109, 50106, -34115, -26473, -53706, -47769, -4838, -40734, -30857, -44088, 29301, -3082, -64264, 36263, 36579, 3277, -3549, -35239, -18971, -38317, -27212, -16120, -20211, -37580, 44951, 27951, -33682, 29927, -56457, -18618, -57308},
{-12946, -17157, 12580, -11237, -69746, 14744, -3806, -10407, 27428, -19966, 33305, -53291, 32985, -29934, 34406, 44758, -43457, -44195, 19886, 2273, 14780, 10306, 64089, 9415, -27855, -73941, 22389, 27293, -13291, -17643, 19273, -49549, 27651, 70178, -29793, 23593, -42050, 10639, 21265, -10860, 79731, -1279, 14633, -37627, -49322, -75329, 43112, 17701, -28511, 19252, -39711, 24749, -20859, -65595, 5676, -6008, 27906, 33485, 38921, -8576, 14766, 42509, 25499, 8858, -32627, -4584, 24807, 22439, -19953, 45958, -44136, -21620, -3748, 1442, 30799, -4021, 45323, 43494, -10129, 31100, 35960, 30542, -1928, -6919, 66607, -42102, -11637, -23105, 1870, 14132, 37815, -2296, -5930, 40021, -41455, -31420, 23621, -28393, 46249, 43845},
{-17939, 7637, 7972, 20099, -7092, -42108, -8558, -10646, -3931, -26715, 34217, -20693, 6262, -60070, -26882, 41136, 6909, -54247, -43439, 27434, 39297, -31313, 18718, 60211, 29337, -75436, -22473, 6101, 14106, -7317, 34834, -13181, 52279, 29268, 17832, -69661, 43006, -14209, -4877, 20147, 15094, -15538, 21723, -32039, -54085, 12355, 33623, 9363, 3215, -9060, 12995, -2463, 56307, -54630, -17080, 45549, -39501, 24332, -3913, -14664, 19473, 52473, -15457, 3535, -68679, 10364, -20152, -15446, 32670, -25192, 21738, 10020, 8204, -27696, -36046, 8720, 45962, 28631, -1133, -6882, 8676, 12162, -33784, 26911, 75616, -10881, 22016, -34151, 22214, 8580, 12872, -38764, 26390, 20357, -33288, 2151, 26307, 22764, -16558, 84657},
{19102, -40335, 42021, -25096, -3205, 13678, 55313, 854, -12540, -3527, 42565, -11179, 42600, -11874, -12067, -68186, 10429, 6327, -14649, -13508, -18909, -50816, 10071, 33635, 21718, -55974, -15666, 61980, -3041, 10129, 84, 29910, 39934, 22929, -9673, 22518, 14451, 3602, -21031, -34119, -79994, 9427, -5461, 3379, -57664, -55365, -19256, 4059, 5728, 24302, 18010, 6938, 3487, -41075, 17292, -6062, -37185, 72598, -4770, 8014, -19866, -12149, 51774, -22977, -14889, -12796, 9411, -44159, 40839, 45901, 33038, 55981, -20442, -34208, -13757, 49123, 10862, -3003, 38152, -74205, -41048, -59037, 4846, 19154, 2569, -7583, 19176, 9575, -31807, 20404, 4058, -28178, 42306, -38220, 9301, -7522, -23867, -6390, -17474, 61339},
{-318, 10089, -25519, -14097, -11105, 14165, 33710, -27239, 60170, -35427, -26012, 5313, -20095, 31324, -12864, 7439, -60738, 180, -29249, -34853, -28867, 35108, 23470, 3436, 2204, 61398, -8431, -39452, 27285, -21419, -107462, 2913, 9315, -11031, 57756, -8703, -1699, 26188, 16138, 26797, -8453, -14241, 46846, 35950, 31156, 36191, 17933, -5646, 67103, -82670, -19612, -22774, 6655, 11791, -97328, -36815, 38187, 625, 17067, 23648, 14219, -77833, -36982, -2128, -5485, -3946, 13787, 62556, -12805, 37495, -643, 51675, 17515, 15765, -9430, -11023, -7361, 55994, -38333, 36953, 31736, 8631, 6132, 88588, 42038, -30206, 2273, 19225, -21338, -50950, -33074, -6301, -49079, 3228, 10772, 28422, 57248, 13084, -19654, -69636},
{9042, -7098, -22077, -154, -3004, 8837, 12941, -18927, 25313, -32047, 65201, 23363, -66443, 2398, 7529, -37961, -19364, -42152, -51399, -41879, 42341, -33819, -49609, 84376, -32287, 16503, 55384, 9039, -33746, -32470, 29196, -12654, 490, 10480, -13303, 16888, -27573, 32773, 8542, 740, -10674, -6117, 59969, 28391, 33546, 66688, 1681, -58841, 20998, 19761, 15311, 8878, -9088, -54772, -29296, 56323, -12576, -26428, -26019, -37144, -6347, -16478, -12065, 26267, 46112, -26388, -45576, 165, 4990, -38277, 5547, -48112, -4022, 16371, -34440, 12025, -71313, 15468, -1711, -35499, 5476, -57685, 22019, -20636, 52364, -16061, 83422, 28141, 7658, -25814, -7803, 2993, 20159, 3965, -12069, 127938, -50943, 2645, -4408, -11463},
{-89179, 48033, 13162, 40721, -25231, -42197, -41070, -70385, -77560, -31131, -16080, -9719, 30181, -39549, -50474, -21854, -60508, -10832, -63269, 8182, -10972, -5550, 13904, 28065, -26946, 10849, -21346, -5433, 7502, -30967, -1760, -15558, 48467, 45859, -4026, -25556, 9745, -20746, 18881, -5023, 42861, -205, 1633, 3657, 3858, 8785, 30009, 1534, 26740, -82876, -27791, 24490, 9864, -14164, -69220, -12013, -26984, 26451, 17501, -10066, 65243, -37665, -55678, 14562, -110777, 16050, 38975, -8991, -16794, 33384, 8299, 60328, 22297, -24459, 54468, 53, 3594, 41654, -46665, 26273, 35362, -41381, 10385, 5499, 54922, -36734, 50577, -34668, 44093, -82223, 28301, -38141, 58830, 252, 25387, 34247, 43863, -50538, -79528, 13919},
{11350, 13286, 37757, -36682, -22244, 5091, 15769, -31024, -32233, -9229, 68808, -3575, -11392, -12105, 37982, 49847, 57267, 14069, -1988, -344, -31213, 8794, 14538, -423, 30788, 10969, 5098, -32202, -16870, 15160, -33426, -6197, 7315, 37006, -4500, -18728, -14956, -4309, -50919, -41567, 2276, 21046, 44162, -12522, 34280, 31157, 232, -11980, 20324, -38713, 12203, 26331, -21011, -2127, -25750, -67115, -20864, 25053, -14305, -23114, 29033, 17312, 55295, 25693, 2441, -11639, -18452, 3223, 38713, 13564, 2562, -53848, 36930, -22953, -52480, -48630, -6866, 42055, 15730, 52338, -710, -29508, 53600, 18151, -46089, -5154, 25727, -24501, 36318, -38102, 30448, -11461, 78003, 10803, -14947, -11103, 8027, 19563, 11416, 59371},
{-62928, 30132, -20452, 6523, -4200, -39334, -21902, 17204, -44747, -29207, 5361, 18682, 12984, -48184, 32015, 32212, -58888, 16323, -32286, -4755, 34321, -17328, 22883, -8401, -19969, -35771, 67843, -8897, 16835, 63075, 65405, -24114, -19230, 64939, 1103, 8638, 5807, 18545, -9703, 27837, 32470, 34147, -11838, -20253, -17632, -33990, -22712, -13977, -9985, 30419, -21759, 25640, 15674, 58344, -6424, -44963, -8411, -6066, 32542, 48377, 44881, 27757, 40367, 46979, -36906, -60320, -14804, -23898, -37672, -2177, -27941, 20408, -21712, -10719, -27619, 11146, 25046, 13883, 19062, -39518, 34993, 8423, 19059, -39933, 7260, -16753, 33371, -3993, -50308, 18068, -25712, 34099, 62801, 25364, -42990, -21420, 27417, -15420, 15482, -47586},
{55406, -22691, 24285, 34225, 6351, -32817, 31150, 24623, 16952, -23827, 26776, 11211, -55140, 5309, -9173, 4544, -32498, -5203, 18603, 46918, 17271, -44533, -34373, 24029, 31147, -18936, -55490, 1234, 11794, -33414, -30017, 4027, 19411, -1056, -2971, 8225, 8598, 57318, -21546, -69891, -38367, 23344, -39736, 32489, -12616, -18843, 4439, -21730, -64412, 58568, -51018, -68113, 49500, -23328, 4454, -14417, 25893, -14838, 50290, 41346, 8160, 21313, 18977, -50475, 30819, 14995, 12914, 16561, -43214, 46531, -33051, -12991, -1116, -45127, -37309, -33945, 10870, 70324, -17754, 23354, 6068, -10649, 27617, -25415, -2258, 23384, -17962, 42242, -74139, -2988, -24894, -14306, -12359, -32415, 6204, -35345, -21928, -41188, -22545, 7235},
{14920, -22734, -14993, -12740, 30894, -24519, 16222, 36283, 626, 24716, -14025, 307, 49610, -7837, 20424, -3794, -19530, 5801, 34797, -8197, -20762, 39501, -27133, 2304, 39144, 15856, -29666, -27788, -33737, -165, -38436, -21137, 19054, 8747, 9793, -44435, 44913, 21256, 20238, 8484, -44141, -21257, -22519, 35331, -36892, -36044, -46711, -64865, 74380, -44427, 12963, -2598, 58933, 58526, -43642, -34311, -8147, -23072, 41704, 9517, -24044, -74392, -29367, 3624, -19944, 16975, 30394, -38457, 308, 3030, 41388, -9494, -30230, -24470, -31392, 24693, 28998, -1172, -49242, -18174, -25442, 41823, -61291, -5681, -7121, 15433, 14177, -28042, 50699, -32276, 18693, -10262, 425, -71996, -18478, -34758, -9159, 770, -11620, -57919},
{-3020, 16793, 42037, 3514, -63689, 30623, 44116, -14162, 36203, 14798, -14, -29028, 1824, -15331, 38903, 762, -19074, -41591, -29777, 29071, 24707, 89221, 31748, -24156, -11834, -19055, 5249, 51248, 59652, 2448, -11169, 22326, 62167, 19390, -7359, 16764, -24091, 25499, -70960, 6632, 11966, -64787, 28174, -17209, -17593, -37464, -2758, 5427, -11762, -27671, 25095, -37768, 3246, 964, 10619, 7518, -6544, -31446, -28671, 969, 16195, 58306, -1708, 19362, -6288, -25725, -28213, 75372, 31123, -39474, -31188, -5970, 61485, -20913, -31443, -36533, -2664, 44669, -6136, 41221, 5777, 39639, -35022, 4276, 31343, 84430, 2418, -8886, 48324, 11443, -32481, -993, -41377, 55101, 10154, 15577, 13881, 29155, -1910, 27026},
{34493, 21658, 21773, 9645, -22294, 26484, 30818, 38399, -2571, -72026, -77718, 14660, 5655, 36669, 2215, -46026, -62909, 47084, 6299, -47738, -25287, -48383, -12057, 9011, 8103, -57267, 13746, 46060, -2382, -7680, -41777, -75386, 29611, 11930, -48304, 54573, -42841, -25349, -4554, 51847, 24670, -43054, -8489, 77743, 65808, -39913, -29743, -74482, -3446, -5917, 594, 21975, -23116, 2514, -30858, 26369, 30977, -31833, 17764, -13375, 45265, -28375, 1060, 37892, -16259, 49469, 7161, 29818, 55173, -21933, -43835, 31344, -28059, 17383, -8973, 48631, -24786, 56324, -8979, -2226, 6195, 61258, 50010, -85970, -29494, -39912, -20086, 80549, -12782, -28879, -6491, -28074, 8811, -3954, -30626, -84209, -9753, -59556, 41720, -84383},
{-23696, 37907, -15438, 24459, -55473, 31349, 38336, 10365, -13216, 26484, -26302, -87135, 50741, 3487, 41794, 5978, 15166, 6274, -37291, -1499, -54343, 56081, -58232, -34892, -35650, -647, 7128, 22909, -17106, 19380, -12489, 33241, 39704, 1559, -8489, 1425, -102927, 7089, -61375, 23904, -24570, 5586, -11547, -2663, 38466, -33377, -37383, 38449, -11785, -38504, -15489, -11809, -11718, 28547, 11281, 4176, 10958, 6905, -56356, 11758, 51454, 66397, 38383, 75278, 47545, 8043, 49353, -2849, 6007, -60553, -5265, 8675, 38399, 16992, 4064, 13988, -4003, -19838, -1539, -36424, -7850, -26118, -4984, 17235, -27768, -20293, -15901, 17531, 49293, -5488, -13020, -4338, 17946, 1514, 46617, 21536, -44577, 62167, -21234, 21727},
{13972, 10862, 12321, -60525, -40722, 46046, -11214, 5111, -29257, -47200, 40103, -18538, 44181, -48821, 13665, 18076, -59565, 25413, 14540, -2249, -24301, 12006, 11657, 2204, 17587, 8738, -30866, 64833, -15209, -27589, 27753, 15215, 43080, 643, -17758, 57608, 2744, 16603, 13959, 6683, 23247, 1884, -30366, -57262, -39152, -7425, -69870, 3100, -58997, -5896, 21769, -19600, 1176, 4203, 69041, -30334, 13310, -3238, -26055, -4775, 25469, 16804, 43834, 7375, -9377, 20121, -11026, 29780, 28666, -12149, -1494, 27572, 9122, -9228, -9242, 42592, 16000, 16000, -11154, 47039, 8947, -29215, 41411, -44741, -12043, 2678, 6833, 43334, 587, -24779, -3565, -30029, 13900, -17146, 7720, -27292, 8620, 16196, 35748, -20189},
{1568, 16896, -20034, -11964, -22362, 20751, 49944, -48343, 1384, 8909, -36666, -31089, 7386, 72919, -91913, -8220, -36515, -16725, -3741, 30962, 30310, 43371, 61139, -48547, -3055, -61503, 28671, -39752, 51282, -11296, -24625, 56166, -11174, 13413, -25615, -11469, 24419, -78454, 6681, 93555, 8743, -23382, 15100, -28438, 62777, 18651, 61034, 9665, 6492, 14619, -19426, 113399, -32084, -12775, 34564, 3487, 11353, -1837, -10471, -4048, -33059, -14793, -33328, 81011, -1809, 103214, 52670, 12237, -9485, 967, -15471, 18659, 38546, 10890, -36666, -19794, -244, 32619, -12872, -6741, -27599, 70289, -21945, -32838, 30210, -60061, 18485, 5308, -2775, -45284, 20762, -40102, -24287, -18704, -70050, 19279, 51133, -5064, 83824, 30167},
{-51175, 35977, -1103, 2209, 32918, -3818, -27870, 53250, -13358, -37943, -42686, -27941, -5974, 29992, -24603, 44319, -21282, -18429, -31066, -4501, 38747, 31717, 1717, 61435, -31440, 16045, -6027, -6839, -22764, 28065, 10609, 33636, -13894, -27820, -31419, -35974, -51051, -35723, -34325, 15734, 32856, -38801, 12477, -45997, 4290, -8773, -30072, 30459, -4219, 35756, 46442, -11320, 12428, 39924, 9236, -13777, 40478, -27998, 17632, 25997, -22272, 5734, -32046, 5543, -33302, 3007, -21983, -28023, 1678, 37826, -46160, 18525, 36211, -27546, -14807, -1483, -971, -54865, -19430, -36733, -35917, 22377, -27616, -9749, 2183, -12447, 8515, -30884, -45147, -15434, 16948, 10454, -23898, 12492, 18267, 16918, 14781, 23154, -28968, 30283},
{5492, 5389, 26069, -19376, -55805, -1434, -68077, 38262, -44853, 545, 43299, 108251, -57645, 10857, 6672, -22124, 2084, -25896, 7646, 56031, -30197, 27135, 30741, 21926, 71624, -14161, -13753, 25724, 70577, 10244, -2468, -38293, 88061, 16653, -20403, -17492, 12517, -1243, -58920, -38010, -20127, 25426, -42230, -965, -37519, -24807, -11423, -54623, 13236, -17913, -53994, 8082, -20523, -8486, 54529, -20736, 41356, -21452, -440, 2395, 29584, -68800, 31713, -4368, 6423, 15642, -57984, 4730, -15554, -52556, -49799, -33351, -14112, -32850, 30155, -40658, -42404, 55426, -521, 25937, 46334, -19155, -21111, 2177, -74289, 6538, 10718, -34650, 13094, -19708, 52919, -499, 26410, 11375, -55140, 23081, 44142, 46061, -30, -1520},
{-7397, 32728, 15257, 56864, 2224, 13796, -47478, -17584, -24255, 19092, 24604, -49572, 13163, -6881, -36539, 70289, 6270, -25260, -13182, 9335, -11133, 11380, 82030, 316, 28063, 31186, 48481, -23703, 12653, 29469, -7363, 21855, -16133, -31723, 47169, 6850, -11440, 3767, -13194, 11224, -34452, 6469, -1347, 59079, -39794, -31847, -29502, 50349, 63114, 15521, -34819, -26358, 58248, -32941, 15685, -32541, -59473, -25317, 22681, -3324, 9541, -14840, 7576, -34191, -39661, -46882, 10657, -45709, 22063, 52178, -12878, 57378, -9838, 49401, -59351, -41797, 52600, 8442, 55753, -3192, 46649, 13666, -16413, -427, 15051, 18653, 848, -73944, 5192, 8265, -32853, 40131, -23606, -45241, -52776, 13108, -12513, -3808, -50866, 418},
{531, -19907, -41752, 12226, -35376, -3781, -7535, -18956, 37820, 6788, 36481, 5232, 31035, -3143, -32865, 15924, 23498, -4529, 66569, 28330, 29614, -39371, 49254, -30959, 21080, 6168, 22564, -24825, -61512, -43399, 66640, 84920, -26637, -16635, 30147, 50139, -13536, -37957, 36240, 54312, -23820, 4816, -38853, 14542, -10202, 10184, 4404, 26401, -13620, -14794, 67029, -13710, 30500, 69233, -13331, 10891, 6054, 2890, -12401, 40050, -13652, 25456, 23252, -16128, 10530, -33629, 58691, -6227, -1802, 61710, 41147, 29549, -1407, 27715, -36900, -15926, 13205, 8457, 16631, -10701, -50368, -9700, 49814, -23339, 8037, 37938, 49636, -41241, -26928, -22792, 26747, 868, -43188, -38202, 30622, 42543, -36661, 71733, -23446, 60890},
{1782, -31710, 9270, 4060, -19427, -40346, -12104, -13103, 36036, -26539, 44874, -18278, 3278, 39482, -20605, -4382, -48044, 20835, 40492, -10251, -412, -10396, -3105, -9724, -11076, -20975, -51483, 4433, 31399, -111481, 13179, -8329, 6549, -21374, -18512, 52794, 24861, -20213, 105895, -10612, -46083, -4957, 5744, -4553, -30979, -3045, 52725, 5253, 33129, -38440, -25125, 23875, 3733, -10415, -29910, 25708, 33520, 38702, -1954, -21047, -20752, 1553, 20458, 3148, 25320, -26662, -14869, 17354, -18655, 83487, 68791, -894, -96887, -1566, -13049, -11233, -20868, 8056, 20578, 1722, -60466, -11682, -25569, 53415, 74907, -14552, -32282, 52307, 27551, -9308, 57586, 59969, -57699, -34985, -25368, 14343, 32028, 2769, 8677, -7415},
{3517, 15355, 39148, -18643, -16326, 25647, 19576, 20191, -37889, 5339, -41495, -4863, 43736, 63260, 41835, 17580, -87, 47465, -8710, 15672, 75645, 3175, 43560, -37413, 27735, 5795, -34623, 7818, -2681, 7272, 34486, 13750, -24632, 59829, 3880, 36323, -55037, -31164, -1518, -13822, 80877, 5264, 26288, 16057, 23840, 24576, 79176, 14614, -19271, 25381, 37474, 23032, -51103, -13434, 7196, 57405, -49798, -78893, -13061, -8123, -40076, -45921, -63066, 10631, 7612, 79958, 10498, 6704, -3403, -8186, 37113, 1663, -4212, -18000, 15775, -26201, -15576, -31501, 27661, 63489, -4923, 9099, -12161, 13413, 34873, -3583, 43539, -27781, 27607, -39578, -32863, -26853, 3984, 29659, 30983, -3028, 16209, -54872, -764, 28800},
{21822, 24916, 31747, 42665, 60482, 15783, 33470, 1207, -56627, 15770, 20299, 49412, 42420, -1385, 10706, -30070, -3851, 36108, -7909, -83190, -57677, 8983, 59379, -47181, 40779, -34798, 33025, -990, -52083, -13973, 69721, 34048, 87231, -19083, 27027, 34040, 36, -1906, 10497, 62254, 22718, 10905, -81945, 71850, -54023, -27727, -34713, 24623, 64385, -42392, -14569, 42652, -1737, 2055, 43922, -3223, -2792, 22228, -49357, -362, -30771, -97279, 20062, -19470, 27733, -5926, 36313, -39513, 14215, -22495, -1263, 41193, -19467, 27235, 1529, -23433, 2667, -14897, -11209, 7971, 26541, -43727, 48574, -26573, -13762, 9144, 63718, -39260, -21671, -25011, -15033, -98956, 3938, -29221, -40044, -26940, 6655, 12559, -30427, -26760},
{-6065, -15158, -75602, 511, 29696, 54881, -11223, -46188, 27782, 45473, 60246, -25256, -14604, -32247, -6420, 40775, 23833, 45073, -59567, 31791, -19153, 3649, 9823, 46512, 37551, 3449, 20054, 25601, 23591, 57227, -10871, -29001, -1978, -21944, -9153, -38702, -4413, 2643, 6569, 9845, -12753, -3044, 39126, -30657, -26631, 30913, -44832, -569, -2085, 29067, -17663, 62341, 24677, -59691, 25491, 1402, 22323, 34949, -3180, -65850, 14350, -18915, -6459, 7449, -8989, 43984, -17353, -47314, -43629, 30413, -46224, 26110, 13208, 4525, -25020, 3968, 15839, 18396, 64812, 7587, 9374, 5711, 15901, 3294, -19406, 45744, 24040, 20353, 9531, 12303, 44062, -10228, 4534, -2060, -49791, 40767, -16942, -4899, 4830, 67166},
{-18936, 9768, -54672, -9436, 6447, -10187, -8851, 20001, -61585, -17601, 22823, 45120, -14494, -4234, 25040, 15084, 1507, 51041, 49125, 32883, 5669, -74203, 34464, -16296, 26653, 52008, -3030, 16204, -22302, -9623, -24384, 43364, -17628, 49613, 20220, 7049, -9106, -46454, 25531, 19782, 9470, -37328, -8423, 3214, -12700, 20581, 40570, -8587, -35540, 15835, -12132, -17285, -9312, 15728, 63371, -20638, 5422, -43947, -73204, -23553, 39295, -10584, -37655, -40511, 52170, 30104, -21853, -47049, -17651, 22019, 37179, -5039, 6072, 66640, 16180, -56397, 15016, 36009, 9302, 124879, 9834, -16853, 40076, -31039, 39555, -36295, 27050, -44703, 5226, -57045, 27011, 24177, 13680, -42242, -5113, -35575, 31128, -22639, 10116, -13144},
{37336, -6429, -34009, -49888, 31681, 42905, -46812, 1186, 4719, 39945, -1466, 5763, -11105, 18523, -7677, -37367, -17109, -10129, -4483, -6405, 26140, -65180, 20832, 35278, 37982, -18201, 15847, -44951, -28873, -11782, -37249, -34177, 8802, 18309, -44787, -6359, -22304, -26979, 11512, -590, 26769, 3842, 1498, -542, 21734, 7270, 3139, 31584, 32383, -9247, -415, 8105, 31427, 18617, -7781, 1152, 23185, -18582, -30679, -34568, -42695, -29800, -11997, 41853, 29182, 19328, 19080, -39323, -25224, 39449, 33129, -11368, -1667, -40819, -38409, -5915, -45345, -4352, 21307, -12148, -65906, 2721, 21428, -4981, 11401, -38856, 29330, 46298, -48621, -30723, 31382, 10391, 18400, -15280, -5691, 3867, -59603, -18017, -29351, -7967},
{-894, 13245, -13989, 25466, -27168, 32568, 8036, 25040, -1149, 17444, -2128, 61493, -12579, 444, 32388, -19037, -4861, 58794, 29622, -29505, -29420, 8777, -35241, -57534, 27857, 12285, 4538, 39591, -4546, 25129, -10549, -35657, 15039, -5, 54847, -64941, -12641, 16600, 38843, -81087, -5920, 19264, 35495, -3022, 35544, -30969, -12233, -1418, -4492, 7481, -6075, 3729, -38461, 45018, -13299, -53555, 18324, 56565, 8880, -1192, 46486, -24472, -7710, 31800, -70154, 8593, -67883, -74771, 10019, -18901, -18032, 5327, -13158, -17100, 35667, -26072, 70973, 12, 6535, 6244, 87117, 8883, 52214, 38044, -2336, -52741, 66, -18045, 5084, -2437, 37252, 1630, 30120, 4099, 42636, -5585, -38330, -441, 34975, -7608},
{56509, 11825, 53700, -18281, 40202, 11139, -23452, 5466, -25682, -28010, 14979, 10195, -9677, -31093, 26444, -14592, -14266, 12658, -10604, -11342, -14085, 5936, -29173, 8122, 22861, 26964, -21140, 12334, 15791, 447, -16775, -4314, -24622, 11573, 22038, 33768, 61634, -13738, 4552, -36258, -2271, -29972, -19024, -49818, -16119, -9250, -8023, 2134, 37925, 16989, 17376, -66865, 35054, -221, -27301, 11903, 26162, 21910, 6516, -23534, -14995, 5942, -39024, -24208, 19200, -48894, -33050, 8975, 43107, 64488, -14686, 1736, -35081, -56716, 23721, -4731, -46138, 1801, -37979, 46709, -25597, -8102, 5307, -35598, -3496, 30271, -1532, 23067, -31916, 13090, 8137, 30273, -1383, -8345, 13866, -22213, -11936, 930, 29695, -45108},
{-56795, -5114, -62329, 43249, -52540, -1536, -17471, -7193, -40377, -2011, 12871, -10276, 13056, -11334, -19447, 8495, 59965, -14396, -23574, 59683, -7720, -7167, 42003, 24973, -53433, -29576, -14310, -21379, 38303, 13462, 57825, 836, 33779, -9327, 53693, 4, 30192, 22360, -33130, 40664, -17458, -35451, -5575, 5698, -28593, -2164, 47703, -17237, 23689, -19753, -11601, 37056, -14511, 46720, 15588, -22767, -32974, -27375, -26134, 51026, 58581, 64093, 15269, 25082, -55716, -48405, -177, -67444, -39594, -14655, 20778, 62695, -9544, -43619, -37252, 16657, 57871, 9942, -13144, -27889, 19197, -40471, 24525, -7882, -18390, 69251, 4669, -39664, 3350, -41310, 59811, -23262, 30886, 31922, 12080, 36091, 37932, 12416, -73429, 19129},
{-46381, 12060, 36602, -4134, 61895, -52594, -19963, -4094, -32498, 49904, 14680, 20915, -34432, 8873, 53432, -11200, 36894, -61181, -17386, -31060, -1625, 22911, 15340, 556, 9821, 22916, -33224, -23160, -8665, -26144, -18481, 17780, 84295, -9369, -14751, -18054, 52312, 10838, -4658, -8348, -19083, -20393, -25194, 8803, -12807, 38839, 12298, 17664, 34491, -47202, 8276, -1760, 27041, 16719, -18487, 27102, -23925, 7968, -28461, 27732, -16337, 28940, 42993, -29139, 52444, -19480, 50330, 7420, 8972, 45680, 52790, 40015, -27732, -1398, 10979, 1464, -32094, 40445, 3596, 37874, 2439, -34734, 2171, 23152, -10360, 94858, -44089, -59220, -5810, 28042, -48252, 4643, -40507, 57601, -7884, 49905, -14154, 16577, -889, 2711},
{27, 14477, -34532, -3196, -24474, -3660, -48424, -27905, 36891, 20329, 2252, 32459, 24288, -12917, 23969, -42662, -14324, 46650, 9837, -42667, 46022, -15415, -48260, -19606, 25509, 6643, 29856, -11414, 6684, 44617, 50881, 24331, -48386, -2787, 47764, 51315, -35611, -26996, 67962, 13527, -13537, -4898, 8531, -4333, -10760, 1239, 21927, 30537, -51136, 42631, 101204, -55214, -43647, 31760, 3896, 27604, -32734, 17974, 33168, -13738, 36292, 55620, 3124, -8948, 49656, -74401, -38053, -22763, -1030, -26560, 16740, 4695, 6038, 2095, -42762, -1914, -10264, -29750, 52243, -11551, -1713, -2827, 1055, 9069, 3564, 21218, 7240, -6205, 29129, 31937, -32745, 44044, 1756, -3377, 16625, 25692, -27923, 35125, -15748, 39556},
{36374, -3820, -6068, -3914, 33302, -51131, -3777, -35686, -11018, 75, -48247, 7534, -18944, -3621, 14962, 10584, 13795, -1238, 23878, 55919, 48844, -31006, 57731, -61240, 41381, 27109, 6379, -40315, -70054, 15177, -48884, -53467, -8647, -13534, 13893, -27314, -20815, 19961, 19243, -30449, 40902, -62020, -3682, -26037, 5069, 37010, 1075, -14876, -5266, 35480, -66859, 18048, -19314, 78910, -67251, 21319, -72771, -17841, 2517, -12504, -18946, 373, -16593, -7684, 6556, -35255, 20055, -31906, -66343, -6772, -8895, -13598, -6857, 24325, 14240, -22049, 13141, 10735, 6607, 5101, -35422, 25468, 32480, -51963, -22536, 32897, -54586, -37220, -5971, -44861, -29325, 22145, -295, 7391, 10229, -58434, 15967, -21626, -14053, -21020},
{37840, 35494, 36293, 12829, 12536, -12437, 33583, -93785, -78758, 25084, -7711, -31760, 18424, 43013, 33088, -4631, 22170, -13296, 36116, -82296, -54805, 35019, 7932, -8351, -12095, 5526, 15956, -13241, -29552, -33025, -13844, 11744, -2889, -53420, -21974, 21436, -35549, 39538, 83760, 53499, -3213, -32405, -65765, 67687, -25198, -33157, 67242, -13401, 5578, -48946, 31140, 19813, 14711, -21090, -58119, -26428, 834, 15121, -17203, -3736, -12507, 2679, 51039, -31238, -11167, -5311, 15726, 59349, -3977, 12480, 23326, 67335, -15035, 40515, 17774, 1384, 15311, 14965, -43184, -20380, -5415, 19259, 40833, -24112, -19933, 6712, -34242, -42128, 55459, -42465, 18037, 226, -20470, -3835, 9417, 6296, 26420, 17246, -17725, -28761},
{2566, 35019, 33267, -56779, 59786, 22018, -17558, 26262, -4674, 23321, -992, 20989, -40681, -9284, -46029, 6236, -23367, 14517, -621, -37093, 17433, -6227, 18875, 25263, 41007, 4042, -47243, -7709, 4896, 50992, -13858, 37425, -11336, -22997, -3045, 2717, 26844, -12158, -12373, -6325, -21439, 17243, 53986, 25831, 6744, 83817, 549, 70030, 942, 49778, 25002, 3629, 27598, -7687, -1924, 62271, -25723, 7082, 36131, 2470, -7420, -7344, 12232, -42846, -38566, -45074, -60726, 19087, 38146, 60981, -25022, -13611, 10905, -3520, 66490, -9962, 34818, -10933, 3307, 20794, 30191, -34165, 66693, -33008, -19026, 23000, -1672, -25604, 32750, 70054, 21834, -93527, 3235, 27665, 35913, 35907, -13188, 58638, 45810, 15331},
{10030, -24686, 33998, 15071, 440, 41702, -6499, 4867, -31726, 31325, 53266, 21522, 72345, 36787, 64045, -10231, 22724, 34739, 42459, 40103, -3579, -35799, 15743, 3870, -1863, 18222, 6430, 106632, 24057, -37841, 57281, 26963, -29790, -3680, 38239, 57776, 3404, -3308, -8911, -24858, -8716, 10537, -5474, 32946, -64278, 8601, 611, 44111, 17579, -12149, 11404, -40368, -14764, -36471, 42175, -16369, 8199, 100969, 6864, -3368, -24224, -13353, 44189, -12886, 12257, -4636, -37261, -31168, 16858, -42492, 22218, -7664, 6410, -36192, -1962, -54114, 25894, 1575, 646, 38078, 31760, -40965, 26133, 62913, -25151, 5084, 47462, -40917, 6142, 19594, 31925, 28601, 22335, 1638, 18693, 4496, 14226, 7489, 13805, 24619},
{8886, 20679, -23086, 22179, -29302, 5858, 18142, 53424, 16404, 34324, 24258, -51, -710, -7198, 22398, 9462, 30472, 7553, 18206, -18803, -14538, -11217, -2365, 38858, -5271, -24458, -25423, -77330, 21410, 37202, 57721, -28362, 54713, -38905, 367, 2422, 61198, -5879, -27547, 802, 33997, 5757, 1946, -34380, 3001, 61923, 3139, 701, -61372, -30715, 35275, -6640, -22758, 36060, 29657, -66297, 15350, -9538, -63763, -13375, 22249, 28331, 39243, 14529, 73812, -12873, -15346, -54899, 24590, -75983, 15773, -47166, 57830, 39879, 9666, 7478, -40684, -25943, -302, -12109, -20776, -6474, 620, -6149, -36554, 56800, 48432, 29878, 9552, -33922, -3773, -11327, 38673, 37938, -20929, 7161, -45978, 69325, 20123, 107691},
{-17567, 10707, 11735, -32805, 1568, 14706, 54382, 77755, 26120, 8060, -30372, -18189, -19561, 15309, -13032, 33980, 37103, 51573, -25756, -33020, 39494, 2907, -18545, -34055, -19580, 46188, -33606, -8866, -71909, 4754, 19185, 687, 46798, -16043, 48232, 31879, -35976, 3632, -43543, -60908, 27610, -8632, 9751, -24279, 62828, 49345, -26073, 47752, -35886, 18357, 48614, 21298, -3570, 41184, 31870, 37037, -2501, 10001, -6095, -2213, 4765, -10224, -471, -2052, 41736, 6476, -16470, 40215, 19504, 4417, 20786, -56805, 68735, -10359, 8902, -5666, -7011, -47510, 32740, 69314, 56953, -14794, 5483, 45619, 34143, -12675, 1748, 61307, 25859, -28863, -47636, 7591, -73542, 40101, -8089, 6752, 13609, 4213, 139, 1950},
{12134, 57839, 27856, 6498, 15449, 17157, 18442, -1646, 3532, 34181, -9623, -35100, 33829, -3502, -22553, 45159, -53761, 53141, -36259, 11886, 1026, 45869, 3274, -12362, 3603, 615, 9024, -49099, 38567, 43257, -29742, 10299, -76770, -35, -16512, 29377, -41975, 8832, 29971, 32579, -20482, -17797, 57126, 35423, -8358, 45300, 18671, 22118, 63, 8126, -10828, 21089, -41543, -43798, -27523, -11811, -35292, -38937, -54730, -36894, -3990, 17314, -77440, -33052, 25495, -28860, -8161, -6810, -40186, 20463, 41024, 4305, -21818, 13307, -44057, -54908, 18109, 46294, -168, -15752, -9494, 38657, -14792, -18893, 46574, -26371, 8648, 2211, 88681, 5214, 43242, 6754, 19746, -70098, 14663, -14699, -52803, -65591, -101604, -17912},
{41915, 12484, 11712, -48315, 46430, -65389, 53444, -45066, -18114, 25192, 16736, -9351, -4070, -3600, -17931, 22985, -63577, -28254, -62804, -21939, 42549, -26728, 10492, -33901, -47490, -2896, -5564, 3949, 59126, -37818, -15223, 15034, 43147, -28064, -53008, -28056, 27174, 16160, -6220, -54411, 38394, 49830, -19266, 3152, -18965, 53834, -3963, -1211, -27909, -26696, -56892, 38259, -18848, -32672, 21030, 2302, -7478, 12517, -3235, -7088, -43961, 14667, 26011, -66453, 11752, 8761, 19641, 66318, -16753, -21161, -5520, -22198, -666, -29716, -11168, 33547, -9139, 34626, -2791, -12244, 313, -14348, -8614, 28150, 20456, -78624, 5124, 46311, 12782, 47558, 14892, -44280, 8564, 4217, -288, -10149, 45634, -35522, -56774, -1720},
{-17062, -7932, 24571, 12780, 35077, 8744, 30201, 36665, -4331, -35356, 28780, -24632, 13854, 7388, -15242, 1995, 24674, -42773, -3115, -27523, -9963, 72425, 17338, 4663, -24750, -49741, -34140, -32648, 22936, -26701, -31012, 41720, 13204, 396, 2345, -1353, 27137, -22048, -44007, -24498, -1075, 21257, -35319, 16309, -7660, -12250, -26650, -997, 24339, 7975, 46590, 14400, -4430, -29618, 16989, -1480, -29544, 28518, 23710, 23927, -31300, -24459, -14192, -1739, -6128, 55185, -21740, 50615, 13461, 29895, 17066, -11044, -57657, -40905, 5881, 10324, -62123, -21352, 18669, -31835, -44466, 11447, -64348, -6598, -5779, -2475, 5818, 38591, 49669, -42699, -1586, 18723, 22153, 718, -39927, 16077, 16478, -42398, 9773, -39296},
{-1276, 23420, 14910, -31619, -21057, -44015, 14711, -18556, 15788, -26903, -35848, 57625, 36363, -20122, -21440, 34487, -13477, 62670, 34527, -13514, -42454, -2767, -2767, 36754, 41000, 27219, 44844, -23086, 27290, 865, -21319, -4616, -29711, 24399, 56714, -3276, -22855, -14029, 17422, 26406, -17634, 41788, 49087, -16226, -8060, 3364, -3355, -10964, -8282, -37014, 55568, -41102, -28272, 26002, -50912, -15570, -3078, -20700, 14494, -13629, -5288, -5598, -19051, -6997, 9314, 21709, -14609, 10346, 49895, -3261, 63000, 2464, 28384, 25939, 57228, -11341, 20009, -35772, -4884, 59649, 20159, 20469, 13759, 35068, 30710, -35095, -11794, -22895, 18024, -35454, 40587, -13543, -36091, -14914, 16647, 8927, 69893, 10421, -14416, 5877},
{-54959, -5326, 12997, -37808, -31706, 27509, 40171, -3827, -14986, 7511, -29156, -26467, 2748, 5612, 11766, -70281, 5002, -36339, -14938, 29241, 17441, 43208, -261, -27482, -23235, -21682, -613, -6253, -38470, 28796, -15371, -18654, 13158, 10305, 5804, 19105, 14402, 15234, 25368, -17008, -57696, -31656, 43512, -53105, -25734, -16249, -39886, -44161, -38401, 18534, -27862, -11571, -87722, -43129, 8371, -12728, -33810, 26891, -24492, 49628, 7630, -39901, -30391, -15861, -11806, 52512, 27756, 50244, 61616, 10812, -16551, 28281, -16650, -32609, 20868, -28503, 1157, 93074, 7653, 5252, -27312, -12066, 2443, -2415, -77209, -9154, -8126, 8358, -19897, 72401, -345, -27601, 25633, -15551, 59801, 10157, -25187, 10046, 55273, 1153},
{-32577, 71636, 29541, 48177, 289, 36327, 28325, -17195, -25421, -13016, -48938, 58692, 14067, -17128, 22870, 52330, -28255, -14108, -30128, 30288, 67812, 13210, 13352, 3421, -84847, -37342, 68852, 39329, -6673, 5976, -35945, 28798, 3847, -30517, -27993, 33761, -69467, 28026, -34749, 38090, 32212, -19486, -11643, 46325, -39344, 15094, 24602, 11341, -31864, -7003, -9984, 20985, -26722, -64550, 29928, -32411, -29435, -33577, -65439, 22812, -5724, 66781, -12168, -5098, -6508, 54065, 11007, 49662, -11988, -55491, 4130, -31042, 50513, 66225, -7126, 3112, 27728, 42801, 50398, -61821, 8391, 80594, 13127, -43569, 19565, -26288, 43433, 7997, -14005, -16929, 9761, 22361, -28749, 73412, -13856, 29447, -28072, -6768, 12409, 38332},
{-22071, 18675, -25288, -9240, 14380, 16764, 12611, 13173, -51038, 10857, 2671, -8510, 12414, -53660, -18567, -11006, -24443, 38103, -1954, 10239, -24133, 9276, 18088, 34439, -41826, 3423, -11932, -2253, 7648, 33010, -3550, -21002, -9320, -20309, -14664, -21917, 19114, 2184, -32748, 14208, 21095, -14848, -22891, 2598, 41460, 57871, -14726, -17290, -10853, -3695, -28998, 47143, 8729, 52676, -19287, -2736, -7538, 13585, -26823, 38309, 8670, -18972, -42304, 48889, -52424, 28710, -11189, -47400, -17157, -47905, -16434, 41491, -1273, -29924, 48547, 49131, -5353, -790, -20558, -41687, 47751, 13392, 8773, -54240, -34991, -42763, 103808, 13675, -9406, -32774, -35239, -42470, 1741, 48108, -10985, 13386, 11881, 31172, 19072, -69590},
{-24327, 17341, 31998, 22726, -41668, 44065, -3908, -46391, 30446, -11096, 18034, 13944, 9523, 7615, 5792, 26566, -186, 33429, -20268, 23834, 328, 33090, -62389, 1558, -35650, 8449, -17741, 34677, 23542, -6303, -15993, 12004, -24599, -13905, 13052, 17396, -24892, 47731, 3571, -31291, 8561, 25411, 12842, -24591, -1096, -17977, -16681, 30868, -38019, -26355, -220, -52093, -461, -51681, -29063, -44698, 53544, 33532, 11162, -56303, 17676, 64613, -4253, 24913, -8075, -12311, -9107, 32382, 30217, -71259, -3027, -22096, 24788, -11396, 42896, -10359, 38703, 1445, 10197, -4696, 72639, 6361, 7071, 21604, 56527, -4398, 34525, 7989, -29109, -8042, -8513, 1784, -19027, 18744, 83810, 76027, 16071, -14663, 16921, 28069},
{-20731, -28596, -54172, -20207, -20285, 16673, -48473, 11382, -47928, 337, 56503, -64407, 12410, -25518, 40243, 5396, 32173, -33613, 13099, 51433, -5733, -12102, 32869, -63512, -26249, 31445, -5652, -35693, -38233, -31759, 29341, -14932, -43782, 40262, -32466, -41444, 20216, -39246, 55297, -3621, -32469, 69556, 45991, -48765, 45797, -2331, 57141, 6674, 69418, -11326, -7324, 43129, 48113, 29688, 29584, -19231, 41013, -25491, 10905, -571, -14233, 7477, 14510, 46801, -6213, 37505, -11536, -11700, -33505, 56510, 48875, -9306, -10479, -37242, 15711, 2963, -54399, -36851, 5659, -3006, -30984, -7896, -3700, 5063, 27062, 16323, -16754, 36985, 35054, -36055, 28558, -21881, 16731, -22360, -48876, -5512, 20156, 7904, -20246, -7625},
{-15313, -16389, 8801, -22294, -49332, 60846, 9538, -11228, 40992, -22217, 20530, -38375, 46063, 45322, -65058, 2766, -56747, 24876, -14067, 9771, -96910, 28797, 3378, 58680, -10767, 9367, -11340, 15978, 76146, -53848, -17559, 47485, -7234, 40616, -33991, -4586, 25037, 30682, -35832, 57130, -39015, 39121, 31529, 14990, -7799, -6575, -9044, -9096, 58866, -59215, 19059, 4573, 48000, -62855, -21823, -49487, 32860, -59382, -61566, -39364, 20221, 25925, 4067, 35736, 47211, -4595, 18087, 35954, 67065, -31000, 21454, 2810, 12246, -7631, 794, 98059, -804, -41726, -9674, -31046, 8657, 13003, -22149, 45551, 64572, -36440, 37963, 38290, 49265, -28939, 20658, -9072, 36970, -58403, -17306, 24754, 15770, 5709, -6083, -4184},
{-31989, 4846, -22156, 41582, -34394, -57501, -19621, 11, 18401, -54730, 31902, -14818, 37096, 3705, -3194, 2370, -34092, -8843, -29138, -4494, 3968, 46054, -16531, 31648, 19159, 48878, 3577, 18255, -39014, -37279, -12758, 24978, 32791, -15285, 54727, -39429, -2889, 37663, -90042, -22249, -29368, 47837, -23529, 22925, -56545, -15703, 16536, 2376, 22707, 11943, 7875, -60450, 21854, -3695, -12575, 17970, -13451, 46619, 18687, -26808, -29620, -20790, 7498, 1978, 25625, 7692, 40397, -8622, 13965, 4953, -24095, 3296, 30858, -27790, 30168, -35413, 28826, -62391, 55142, 5852, 41496, 81, -40286, -12263, 43110, -12171, -4616, -2011, 30087, -25588, -41713, 28861, -60550, -33984, 1467, -18566, 45889, -50051, -69920, -5136},
{2112, -41202, -2244, 22794, 12616, 69646, 10164, 32965, -19450, -19076, 12467, -3477, 25687, 34165, 14318, 20745, -64219, 28690, 77032, 17554, -52414, -17304, 36157, 14263, -58541, -30253, 23718, 3669, -24063, 32118, -10355, 2320, 15053, 7545, 67788, 67444, -46633, 27343, 52740, 12928, -17140, 30900, 10236, 50759, -18269, -41827, -41614, 4274, 43708, 991, 6410, 21037, 5428, -30755, -16165, -23413, -24116, -6798, 42382, -24479, 18205, 59779, 44573, -25366, -27040, -89030, -4834, -35063, -20441, -26075, -3947, -2580, -24950, 10644, -46804, 3644, 34425, -5926, 14077, -2721, -4710, -5413, 39717, 41116, 11200, -32506, 34952, 4271, 52774, 13186, 36561, 24280, -6488, -7623, 7949, -26742, -5565, 24634, -22480, -21443},
{25202, 918, 47896, -6772, -20617, 28933, -70863, 8379, 32666, 15863, -30, 4684, 13113, 3537, 9494, 7571, 15296, 7666, 2238, 3753, 29017, -21048, 63218, -40246, 39646, 32221, -2359, 28437, 945, -18404, 19135, -4935, -50292, -25705, -302, 23762, -5631, -1520, -5255, -17617, 67732, 34660, -38904, -19944, -28083, -10141, -6722, 53027, -6037, 7617, 20206, -50921, 43208, 35999, 19428, -11976, 5614, -4810, 24453, 10162, -20382, -47095, 18642, -30462, -46583, 14126, -10761, 40671, -35998, 18767, 10777, -21914, 3517, -12235, 60051, -15326, 3341, -19479, 45563, -2409, 41342, 4416, -26226, -7694, 25607, 30798, -14402, 28760, -43867, -11993, 31539, -8614, -48736, -9371, 32533, -12932, 53526, 22, -27195, 15167},
{-29748, 9360, 18907, 9353, 33104, -26559, 20050, -12496, -29350, -8745, -18708, -7164, -5374, 56053, -42335, -20340, 16220, 5277, 3350, 30293, 45497, -34013, -5101, 21345, -22396, 56133, 6956, -37140, 2679, -33885, -44, 16260, -45782, -15408, -7681, -70572, 21787, 7296, 9767, 31517, 5135, -31148, 18521, -44499, -12580, 57369, 897, -30288, -6157, -6586, 42355, 6722, -555, -22951, 13292, 57310, 11331, -39399, 4616, -69329, -74600, 23753, -42242, -34790, 37530, 21022, 24439, 4421, -1562, -7253, 27988, 24696, -1434, -13065, 34254, -14844, -4675, -17271, -20582, 8654, 13208, -35341, -2610, -16638, 33241, -9019, 26134, 4540, 23137, -12553, 35567, -28128, -7527, -40145, 9958, 2254, 19903, -26256, -46286, 57621},
{76634, -10392, 38648, 20532, -9475, -27356, -7859, -23872, 73811, 50556, 50366, -37439, -3655, -24371, -25929, -31049, 12844, -45000, -23475, 7511, -12889, 75205, 21279, -53052, 43480, -2587, -15833, -55656, 9256, -28420, -20633, -9109, 71418, 6037, -9548, 4418, -23457, 20095, -24918, -54222, 16099, 2723, -23034, -24884, -32537, -41731, -15971, 55439, 53367, -35327, -70259, 7551, 44747, -1790, 22117, 25496, 25819, -24530, 41382, 21647, -15697, -36585, -24899, 11755, -41231, -14881, -17724, -3755, -16535, 47580, -6101, 2627, -60118, 14399, -42445, -21766, -36805, -11440, -16542, -568, -68667, 390, -46846, -9913, -24825, 68912, 40156, 14511, 33426, -64302, -10027, -36954, -63607, 25361, 18451, 9475, 78660, -32602, -25934, -2486},
{-606, 21877, -5059, -17012, 12490, 21224, 78013, 14658, -34461, -24139, -8408, -26376, -29304, 14098, -29296, -15146, 27044, 24357, 68084, 503, 12725, -16636, 31367, -15534, 17067, -75083, -23260, -38128, -43517, 26163, -47371, -8715, -2319, 20578, -23598, 14622, -41568, 48781, -31926, 20993, 28052, -26299, -25344, 72756, 35395, 34882, 37149, 10053, -67860, -23014, 39144, 41200, -27669, -26615, 42878, -43216, -11994, 8465, -68050, 40205, -48120, -29371, 57365, -13232, 30296, 32261, 76694, 5819, -12777, -17091, 9825, -56364, 51822, 4089, 17925, 36827, -33828, 2443, -43598, -53375, -24185, 55020, 40480, -26573, 21946, 27429, 41384, -9872, 25609, -48362, -35132, 2212, 35736, -8605, -26177, 20729, 32442, -3686, -18646, -8204},
{-78626, 60122, 3778, 26971, 22336, -62763, -24191, 6763, -12146, 3111, -5793, 10550, -15829, 43769, 32382, 246, 36175, 42201, -13284, -10942, -31188, 51432, -11464, -32550, 4638, 58237, 36750, 15084, 18895, -1862, -24430, -6833, -2320, -42418, 31179, -45160, -15467, -39162, 43587, -3887, 7789, -16488, 61745, 73777, 28521, 4511, 47259, -11832, 13147, -61381, -29447, 68681, -21231, -39639, 938, 10371, 11675, 14428, -14547, -38321, 65209, -29587, 10117, -33239, -12778, 16390, -38326, 26533, -19152, -1146, 23336, 20776, 14501, 6172, 9556, -59170, 39593, 4780, -34821, 15004, 51806, 7150, 5013, 39848, -6900, -31312, -8962, 7229, 107604, 28446, 20530, -49127, 8153, 11371, -36936, 6178, 57385, -860, -7404, 12930},
{18153, -35894, -11895, -72674, 10516, 40106, -98479, 107772, 111269, -14503, -35687, 60561, -105994, 17980, 41123, -57708, -30264, 44193, 22073, 2863, 10154, 34361, -18838, -46675, 17235, 7075, -79151, -24663, 9191, -40774, -45939, -48469, 4929, 78676, -3110, 64657, -18783, -6682, 20752, -51521, 53299, 28386, 9294, -39808, 49787, 474, 3990, 24475, -32564, -9627, 20923, -5904, 3592, 19854, -28813, 46831, 39075, -8598, 4495, -35975, -12567, -61481, 25185, 7935, 42486, -15814, -31993, 24031, 5688, 19712, -11310, -96137, -61548, 27061, 18494, -13760, -84458, -43936, -30050, 62611, 38417, -8476, 1916, 52538, 38098, 8682, -21060, 39385, -22333, 55803, -7422, 43015, 1727, 64985, 15759, 32240, 8466, -19502, 40322, -32105},
{28433, -20560, 20933, -3093, -29728, 3616, -4003, -22409, 66247, 5802, -16947, -61283, -9745, -13717, 10865, 11308, -32749, 8613, -19800, 13625, 31280, -77903, 6931, -46441, 21245, 15933, -22840, 12090, 11983, -50934, 19150, -6145, -40736, 2551, 8857, 19241, -32025, -71151, 20611, -13782, 104521, -14158, -35142, 51259, 35748, 7554, -2905, 44039, 49653, -50450, -34041, -27494, -23015, 13231, 2630, 14039, 47831, -1733, -26684, -16522, -359, -7500, -57110, 14668, -12753, 42520, 36568, 15487, 29614, 121312, 4947, 19061, -56866, 1245, -10577, 8413, 8332, 129, 3578, 31302, -20031, 55775, -9777, -20808, 79885, -48270, 68623, 55203, -10534, 4634, 2351, 42622, -27692, 13226, -21640, -21957, -25152, -72726, 21756, -28322},
{-16379, 22891, 4649, -13456, -66067, 11918, -21829, -10094, 34562, 5432, 4421, -63609, -28316, -36019, 3556, -32993, -9758, 16658, -39306, 34285, 16514, 10829, -30266, -7164, 24149, -19578, -22688, -14618, -4613, 66027, 51453, -41269, -4682, 52056, -24920, -32596, -63576, -9716, -39414, -8197, -38246, 33591, -9916, -14103, 32894, -74046, 2346, 6825, -60593, 34002, -46735, -57758, 9350, -1066, 30144, 56004, 41659, 12445, -12149, -11221, 68970, 6859, -3153, 21109, 8867, 63422, 63186, 37632, 26279, -38571, -19399, 8605, 55424, -3439, 42912, -49093, 18587, 29377, 20870, 38645, -33789, 1713, 31691, 2683, 3399, 12554, -18067, 9582, -15264, 5831, -27433, -51444, 6004, 8696, 28157, 28438, -23157, 19445, 19680, 51530},
{35061, -11574, 57930, -24337, 54114, -29947, 17518, 10806, 33255, -10445, 55088, 15398, -18391, 9672, 4553, 19178, 4449, -7485, 16597, -7174, 3678, 7579, 5944, 17593, 18179, -19674, 3720, -66422, -10895, -68928, -40823, 4915, -51282, 52216, 2079, 13174, -49236, 6594, 9171, 26364, 45816, -41375, 10129, 6826, 2043, 56382, 32957, 85389, 5808, 20230, -14903, -34485, -16346, -39079, 21451, 29174, 2825, -14966, -6908, -38675, -20369, -35514, -26553, -38090, 41535, 6406, 33432, 12509, -7486, 30786, 13565, -79753, 884, 69485, 46204, -26722, 4900, -37716, -62476, 22680, -2903, 21977, -42104, -2258, 48358, -20195, 53438, 3154, 19637, -35371, 29589, -57294, -14696, -14664, -37162, 27409, -3482, -2846, 41989, 22618},
{8266, 6732, 47468, 15962, -26709, 31728, 1329, 17977, -6080, -11882, -34814, 1580, 23722, -28779, -38338, 1255, -39543, -1647, 16008, 9782, -32552, -63717, -646, -14448, -58030, -39401, 62029, 17988, 5086, -40297, 4723, -10169, 11875, -3433, 8160, 48342, 26025, 3211, 18869, 11935, -48896, 16617, 12006, -2210, 39717, 42622, -49826, -40303, 40915, 20755, 26228, 9190, -25310, 7676, -53030, -18317, -11134, 40005, 4735, -13047, -25346, 72367, 7359, -8140, 7082, -43424, -8710, -27107, 57296, -46359, 11813, -58592, -36812, 22755, -17253, -6011, -19059, 29660, 19447, -11713, -32187, 6928, 536, 4841, 19457, -3833, 40899, -1568, 6087, -6061, -9881, 20009, 10939, -70694, 15021, 13623, -49664, -16754, -22018, 1442},
{-35081, 37112, -53441, 6033, -30484, 25131, -17134, 45463, -6110, -5395, 30390, 25677, -582, -3621, 41608, 17269, 1269, -17986, -9187, 14852, 16146, -31859, -43334, 10362, 4580, -4177, 37670, 24780, -20827, 1393, 15399, -26258, 9792, -11488, -12362, -496, -33432, -16570, 63601, 9635, 11593, 49893, -1944, 15086, -98, -40145, -921, -59890, -12729, -5190, 33776, -4679, -25966, -6400, 22490, -38037, 39080, 26141, 4507, -25240, 63445, -42019, 39376, 11976, -10776, 43599, 21554, -5375, -42656, -37091, 20833, -58168, -11987, -34841, 56040, -3148, 14430, 14842, 23353, 5428, 31100, 31251, 4294, 75925, 5722, 2053, -12656, 11692, 41971, 16588, 45190, 32620, 11260, 3932, -37620, 20290, -12167, 59443, -7917, 6608},
{14984, 21054, 21262, 72224, -35415, -45715, -18096, -15391, 19485, -20689, -17601, -15728, -22721, 15056, -34336, -29902, -7369, -45168, -49244, 31792, 44516, -9027, -46352, 16924, 23085, 28080, -40537, 19928, -48835, -9052, 53661, 48090, -5467, -78922, 11235, -22332, -19689, -34705, 20169, -51097, -2710, -20623, -37449, -21063, -50074, -26163, 6994, 53716, -853, 76746, -47801, -73470, -37901, -14287, -10889, 20875, -63098, 2212, 11315, -177, 48345, 10651, -54617, -924, -63298, 11871, -24948, -41152, -18837, 55752, -29538, 13865, -61841, 71378, 14059, -60513, 25317, -9291, 1306, -2764, -12430, -22036, 34166, -59150, -12231, -16561, 12856, -46037, -9100, -22357, -9940, 55840, 4925, 7296, 73691, 1389, -17027, -38213, -7512, 41420},
{-13182, -2183, 26888, -19822, 5035, 22965, -12281, 15501, -74015, -30898, 15861, -8000, -11285, -17369, 19096, -84219, 9010, -37944, -15194, 232, -6643, -20482, -26845, -20343, -19694, -33544, -3243, 31862, -29091, -51580, -43399, 2008, 6895, 37821, -69771, -5458, -39197, 33921, -14339, -14917, -18415, -50131, 29419, 2380, 18811, -57152, 16729, 37765, -7127, -12674, -40666, -69228, 3145, -485, 46668, 54245, 31917, 11521, -52331, 33889, -8316, -5465, -37602, 19463, 645, 14182, 53134, 10528, 5482, 62526, 46143, 13852, -32791, -28490, 32004, -24499, -57038, 48021, -29235, -4456, -60254, -9605, -21972, -22774, 20966, -34156, -29281, 55600, -20110, -7700, -35726, 24193, 62135, -17368, 19654, 3380, -38644, -46672, 10291, -22874},
{-51898, -11714, -66575, 45084, -13910, 14721, -38385, 10363, -22005, -78121, -22946, -36928, -22067, 3169, -41270, -56490, -29071, 9817, -25047, -9140, -25503, 51960, 15206, -48370, -79322, 6201, -1300, 45199, -12277, -21247, -59759, 52639, -1305, 43378, -28837, -5866, 53915, -19492, 14870, 89017, -48866, -33495, -41753, -15176, 32348, -35776, 29917, -3713, 56299, -41272, 3958, -7669, 59541, 5770, 25326, 3366, 18493, -20598, 3332, 58601, 26430, 14836, -32175, 39103, -9960, -4447, 15288, 1565, -31771, 37205, -11587, 45424, 17616, 8470, -10344, 56529, -50769, -35094, -20097, -18495, 7702, 58407, -24725, 18194, 68209, -20628, -62676, 26991, 34502, -13020, 5526, 56762, -9953, -15830, -48940, -26202, 53116, -27312, -8993, -88510},
{21256, 58383, -5158, -42050, -8531, -32928, 36000, -18061, -3787, -33053, -37241, 89673, -24765, 42716, 21623, -19394, -5081, -10387, -29769, -45742, 25057, 55080, -65615, -6264, -12957, 30239, 6743, -38056, 1882, -27798, 7136, 416, 31465, -9516, 59915, 28276, 6514, -20939, 47598, 28081, 1847, 31041, -17342, 25480, -7334, 25627, 49700, -42361, -21868, -13522, 1606, -22005, -15620, -42361, -23545, 17624, -18484, -93950, 39033, -18993, -10908, -26924, -53427, -33267, 41520, 17012, -33449, 4317, 35616, -4826, 3643, -20989, -19799, 12527, -53258, -6097, -36417, -27443, -7090, 14784, 64978, 30852, 19444, 9498, -16006, -41699, 10821, 7002, 75896, 11055, 61482, -14455, -68086, 15050, -43055, 19368, -7007, 10948, -3085, -49271},
{-8867, -41116, 27913, 53625, 1386, 12244, 62933, 61491, 22467, -46302, -13460, 10387, -12572, -7394, -16309, -9808, -7797, -11393, 11952, 41710, 46626, 45715, 26393, -37647, -30979, -18519, 13908, 35330, -51929, 4888, -7557, -43203, 19186, 68927, -7533, 27240, -8172, 18854, -54910, -10677, 15576, -17160, 46196, -21840, 26838, 27475, 18825, -12694, -8961, -26397, -12766, 51582, -19842, -15777, -17178, 45412, -10451, -19375, -29108, 8591, 6197, -16728, -21883, 57330, 11969, 63480, 21425, -6211, -30754, -20974, -8517, -54533, -30332, 25226, -40077, -31047, 495, 30664, 29374, 23400, -19030, 76151, 9508, 16655, 37039, 10794, 13638, 34391, 1465, 18851, 472, -21957, 10091, 25514, 42151, -13865, 30842, -104543, 17998, -7698},
{-89178, -32129, -25187, -23051, -26018, -66085, -14908, 35868, -56368, -37727, 1752, -13103, -40338, 31455, -4329, -47654, -2063, 10643, 41087, 9696, 12172, -68581, 21739, 53740, 20723, 81954, -54618, 26385, 11302, -6054, -25830, 5032, 42392, 16911, 1707, 23015, 39715, -14414, -16530, -9924, -5628, 36108, -43443, -14515, 97272, 37641, 20343, -49113, -26872, -19093, 39581, 18285, -521, 12170, 2140, 13791, -15820, -19493, -73133, -5852, 77802, -2716, 44886, 48432, 56341, 24272, -26660, 35835, -19074, -12996, 56632, -7256, -11483, -68860, 46906, 40856, -18663, 34951, -3242, 49688, -10981, -48089, 16886, 25481, 14705, -24665, -1366, -5950, 56566, 42856, -55233, 24032, 15633, -7659, 52639, -18278, 36220, 35887, 13089, -2459},
{71356, -42614, -776, 51965, -48627, 25692, 17752, 7257, 23289, -5323, -32375, -2155, -37767, 19395, -19758, 1928, 71901, 10526, -13835, -1519, -56826, -24767, -43595, 60928, -2638, -6581, -17775, 33689, 9273, 57183, 27622, 14111, -16096, -25347, -31233, -7308, -8129, 122, -21461, -33596, -40859, 41786, -23636, 16246, 56776, -24715, -19222, -75367, -2266, 27432, 40092, 34266, -853, -41922, -19209, -3237, 15778, 20972, 21071, -10379, -23442, 20256, -19999, 11552, 174, 20721, -31053, -28258, 1677, -54058, -12211, 12453, 17161, 16009, -37609, 343, -40274, -78877, 36475, -29471, -12975, -15810, 42836, 12819, -17392, 9324, -7905, -17651, 8850, -18627, -44278, 49840, 42046, 50146, 9916, -42522, -5228, -18251, -8459, -9768},
{-2820, -26273, -49535, -8319, -29603, 57796, 31580, 6094, -859, 5209, -36789, 65408, 9682, -331, 37450, -8326, -31789, 86906, 3932, -14087, -12004, -47362, -75990, 8255, 39843, -104380, 34005, 40011, 67925, 57423, 18353, -44451, -13377, 19786, -28358, -14001, -5797, -23199, 17221, -37325, -56415, 4326, 78004, 80730, 36358, 1219, 5740, -56288, -10744, 19689, -11473, 32559, -39077, -2799, -5434, 18647, -3051, 4689, 9076, -29271, 80181, 12066, 1919, -1218, 14488, 17043, 20681, -52043, -36076, -54135, -1598, -9102, 1032, -3840, -11894, -10321, 3710, 86881, 39618, 1544, 5173, -26935, 37575, 1226, 9210, -21075, -27367, 6868, 25782, 43060, 6044, -10932, 72378, -17835, 1405, -36685, -40974, -5858, 44464, -7875},
{30073, -36250, -13293, -5480, 31695, -12664, 25610, -45833, -1330, 28285, -86168, -5865, 34986, 35176, -25212, -46334, 10989, -17584, 73579, -11434, -45824, -52023, -27673, -161, 27250, -19467, -61229, -63652, 18753, 14684, -14643, 9073, 10504, -6794, 44429, 45124, 18124, 11008, 57086, 53021, 3296, 28065, 20465, 17018, -28073, 7478, 28897, 7610, -114, -21195, 40731, -13856, 42, 191, -106442, 27206, 6895, 26372, -1921, 47540, -1080, 38733, 29059, -16959, -27719, -51893, 1238, -4421, 57905, -12335, -18160, 19099, 15675, -7079, -21681, 38275, 8101, 3004, -36791, 33613, -722, 12695, 37055, 28111, -54047, 20166, -29023, -18621, -41908, 43268, 26574, -39768, -25899, -2543, 58533, -15864, 43525, 48986, -1409, 560},
{-19964, -20582, -81394, -43607, -4480, 26028, -13474, -42089, 4713, -5931, -28879, 17096, 5449, 16208, 11017, -79230, -77016, -28862, 2782, 3053, -9780, 10980, 83405, 30580, 20218, -27647, 24982, -39797, 23899, 80699, -68220, -69024, 10749, 32789, 47974, 34875, 6300, -42899, 30969, 19407, -31717, 18765, 37311, -52002, 25681, 22949, 5863, -4155, -15640, -290, 9597, -23818, -32068, -20192, 9630, -16894, -45763, -29076, 33348, -42402, 49827, -13244, 2697, 20370, 75362, -4409, -4824, -24424, -5854, 2643, -55402, 1850, 25646, -13733, 14983, 9874, -54025, 15040, 28315, 8838, -56621, -8137, -47916, 2021, 14840, 10308, 15982, -14655, -21555, 32035, -8331, 53169, -32, 46940, -20143, 65521, 23593, -29545, 11759, 43626},
{30458, -20916, 27512, -11128, 10857, 25445, -27970, 45024, 27389, 2424, -2333, -26837, -29141, 5280, 21149, -45576, 60936, 1324, 45107, 161, -40314, -78059, -9838, -26567, 1860, 96653, -16073, 63763, -8601, -49224, -29842, 18675, -66508, -15303, -41622, -5457, -31376, -4426, 28573, -20573, -14269, -17404, 3522, 32288, 58030, 44258, -18843, 33540, -2955, -29506, 61120, -25697, 26109, 17694, 25406, 18420, 30894, 19873, -46139, 4168, 28923, -1402, 39416, -50061, -1395, -22545, -42547, 59646, 1009, 31765, 33494, 965, -22905, -10473, 27994, 15461, -16638, -14006, -21670, -32900, 30160, 5670, -14591, 12598, -32673, -20146, -20105, 7847, 30727, -1786, 20897, 30242, 56295, -34434, -10192, 7969, 21193, 26885, 14935, 1235},
{20572, 20458, -2633, 100209, -32383, -946, -70625, 14139, 50492, -18047, -5034, -13730, -43178, 7776, -20195, 64436, -16115, 31829, 25449, 93112, 31051, -34658, 42676, 13617, 29997, 46904, -120, 51869, 38867, -1385, -5911, 21915, -4765, -80296, 24257, 38923, -4429, -59818, -6648, -17142, -41597, -32551, 13198, 23743, -22131, 4017, 14210, -3138, 22498, -7336, -3598, 3843, 20243, -22411, -22499, -60860, 26278, -16842, -11030, 6341, 27702, 13830, 31632, 91, 11804, -9537, -6576, -21764, -56920, 40285, 1893, 14631, -880, 33365, -31082, -13805, -20654, 30692, 59542, -31289, -43630, 34849, 20845, -15337, 50554, 73710, 18256, 27673, 15992, 1623, 38623, 77198, -29953, -66976, -13261, 9270, 14941, -21020, -88275, 61095},
{-66648, 70695, 26241, 33270, 43087, 27093, 6580, -12267, -33620, 6762, -25963, -15540, -3881, 8660, -17101, -11611, -8439, 26038, -28476, 7496, 7561, 45970, 4686, 38069, -42667, -57028, 32624, -415, 41056, 28066, -56948, -21193, 19821, -54336, 11653, -22973, 16132, -3829, -8285, 49190, -23041, 8837, 7119, -12010, -11438, 14485, 47018, 2413, 4670, 30405, 41472, 39303, 19369, -21119, -26853, -32136, -27105, -9998, -31649, -16445, 7536, 52074, -18493, 55778, -85133, -16708, 10843, 975, -17443, -40592, -14780, 8845, 45441, -5672, 58961, -7221, 33327, -6175, -7989, -41477, 39802, 43881, -44499, 10145, -1012, -15567, 9304, 3861, 9653, -41554, -57920, -35562, -528, 35226, 22829, -8618, 64020, 44889, -6929, 30608},
{3920, 34470, 26866, -46426, 30376, -46318, -40191, 7522, -9072, 1438, -19451, -5038, 42042, -9423, -3061, -4064, 10838, -24829, 50219, 33426, 6786, -6446, 32948, -1867, -13734, 3266, 11906, 2580, 23875, 250, 27042, -18762, 18686, -2926, 11874, 14983, -23051, -82153, 55725, -16734, 50922, 20332, 21304, -41965, -494, 22135, -10409, -11660, -34939, -24610, 67082, 60589, 14030, 46181, 26919, 51210, 1122, 8121, 17242, -50160, -40744, 2502, -1611, 11274, -19842, 14893, -13198, 33302, -4605, -1056, 8904, -26269, 25521, -48082, -6673, -19827, 18000, -29183, -29437, 36460, -12588, 2842, -28089, -38574, -44396, -5966, -21994, 20398, -39246, 291, 84095, -32090, 741, 11138, -20194, 47128, 10751, 8077, 14187, 39112},
{-4626, -26256, 22567, 35938, 2232, -38648, -10315, -52683, 4741, 10854, -11332, -38642, -3639, -20488, -30710, 15479, 11455, -74700, 12369, -8207, 7109, 12816, -210, 21714, 5374, 16581, 26214, -58287, 21680, -3918, 61283, -9730, -102555, 3059, 11192, -65795, -23717, 55701, -35251, 13368, 10688, 17521, 33213, -20312, -37061, 30411, 24776, 8789, 13312, 24379, 11624, -61690, -44517, -20104, -15905, -37571, 3358, 13004, 23755, 42850, -65391, 39348, 27856, -36661, -21013, -4388, -35559, 9927, 39212, -31735, -27699, -34463, 71094, 23142, -24293, -68274, -8274, -45122, -31882, 34454, -26263, 8582, -24534, 42980, 5166, 10096, 16809, -81848, -20332, -37903, -9100, 753, 1115, -61155, 3759, 5995, 21268, -11587, -53950, 47853},
{-33181, 2922, 56212, 4984, -7999, -6780, 1061, -13644, -5630, 24272, -54564, -3045, 16813, 58603, 17225, -14874, 67401, 16515, -6478, 25938, -76078, 23359, 2441, -50547, -29537, 56212, 12950, -44069, 24646, -108667, 26570, -3906, -42569, 22580, 47836, -26977, -9009, 9471, -10880, -30314, 53017, -4424, -12122, 56955, 15373, 22293, 5171, -4335, 82915, -7884, -52391, 21804, -30139, -19553, 7438, -52502, -18491, 58433, 20384, -26671, -22604, -11093, -8925, -49818, 3890, 2459, -6959, -16771, 30242, -18662, 16396, 24382, 46024, -26582, -18113, -58000, 18270, -20867, -54873, -31322, 45314, -7554, -63518, 41930, 9080, -3427, 14909, 30308, 71855, -48935, 24638, -5981, 10393, -11104, -62021, -66892, 8119, -68388, -33094, -20357},
{-40484, 23057, -47102, 81933, -7859, -22192, -335, 6430, 57942, -19116, 18349, 2174, -14303, 58723, -33867, -29716, -26267, -1317, -44766, -36471, 93838, 9212, -24796, -14092, -24318, -114411, -22301, 5772, 72592, 1010, -18678, 45060, 18636, 9946, -40584, 6498, -6807, 11466, 41638, 11193, -32912, 3367, 3487, 49183, 22153, 1032, 76982, 63810, -62399, 39932, 48916, 53866, -37161, -21775, 3175, 62209, -15257, 49621, 52192, -15081, -10706, 17849, 15106, 5379, 47177, -17020, -453, -48067, -45742, 22272, 17629, 33817, -30340, 40251, -68764, 10072, 7224, -2106, 11072, -33069, 1644, 31246, 23263, 25190, 36226, 8704, -35384, -18085, 51588, 8045, -30234, 26240, -10795, 13432, -2514, 65914, 8322, -7372, 7555, 49245},
{18693, 27565, -31811, 7257, 20271, -12286, -9288, -52956, 23858, 37968, 13420, 41632, -5455, -36671, -5578, -21808, -51586, 25025, -17493, -33869, 11995, -19625, -37588, 7629, 3192, -38495, 62653, 18229, -28917, 11933, -29917, -48411, -46523, -19111, -6594, -6486, -18812, 12816, 53848, -35965, -70607, 70302, 5581, -34262, -32247, 21890, 2661, -6485, -32891, -7046, -57010, 48123, 23576, -18241, -10062, -2668, 36436, 30754, 48382, -59902, 33382, -45624, 781, 17522, -5808, -63290, -14267, -14384, -29953, 48098, -1059, 6604, -61372, 44198, 18373, 18144, 5705, -24379, -9624, -27808, -338, -60718, 9873, 37970, -41534, -25347, -22429, 39753, 12003, 25039, 40942, 21424, 53899, -20846, 4317, -4246, -21628, -33213, -10361, -14109},
{-40432, -9441, 7005, 24244, -33087, -8013, -48537, 37809, 2087, 35803, 30229, -57490, -35083, 35759, 81510, -8375, 71360, -40120, -31394, -9192, -36403, 13154, -17944, -49304, 37358, 17946, 6812, 14688, -30132, -4929, 59948, -51952, 2422, -22128, 7645, -44233, 37038, -401, -13642, 38649, -23922, -37191, -6979, -26742, 55291, 27322, 2241, 50631, 13219, -6705, 13793, -4558, 11984, 12121, 2914, -3148, 35933, 25644, -21689, 17504, 18618, 8080, 7868, -9476, 28708, -31785, 40059, 19729, -15661, 49321, 5139, 1121, -6647, -40278, -47671, -82143, -37801, 7488, 2639, 56111, 25422, 11467, -31478, 14277, -3286, 86916, -22468, 9451, 44542, 31622, -22165, 78509, -12274, 4488, -41830, -37248, -8270, 12586, -9093, -16635},
{83850, 5952, 6641, -33751, 14440, 17384, 57052, 3077, 34492, 2246, 30062, -7792, -40692, -24144, -13937, -8732, -34694, -16489, -42784, -21850, 16621, 33168, -49547, -42746, -60309, 86206, -143, 33427, -15982, 11296, 14012, -3509, -17724, 44243, -56312, 9520, -12610, 85580, -44243, -25386, -51814, 14900, 36105, 2197, 8637, -14628, -24178, -34045, -24375, -29269, -9720, 14204, 14580, -69373, 32481, 1097, 26318, -14427, 3805, 58664, -52883, -13273, 3238, -23251, -1490, 15632, -12439, 52288, 7496, -10106, 23361, -1020, -17534, -8410, -81101, 9723, -26812, 9236, -6275, -29674, -32342, -22880, 10345, -4122, -2, -80601, -3303, 8025, 10897, -14376, -12406, 21522, 65396, -29881, 18259, 32428, 33129, -36979, -16247, -37917}
};
int c[N][N];
int main() {
int i, j, k;
for(i = 0; i < N; i ++) {
for(j = 0; j < N; j ++) {
c[i][j] = 0;
for(k = 0; k < N; k ++) {
c[i][j] += a[i][k] * b[k][j];
}
nemu_assert(c[i][j] == ans[i][j]);
}
}
HIT_GOOD_TRAP;
return 0;
}

26
apps/cputest/max.c Normal file
View File

@ -0,0 +1,26 @@
#include "trap.h"
int max(int x, int y) {
int z;
if(x > y) { z = x; }
else { z = y; }
return z;
}
int test_data[] = {0, 1, 2, 0x7fffffff, 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff};
int ans[] = {0, 0x1, 0x2, 0x7fffffff, 0, 0, 0, 0, 0x1, 0x1, 0x2, 0x7fffffff, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x7fffffff, 0x2, 0x2, 0x2, 0x2, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0, 0x1, 0x2, 0x7fffffff, 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff, 0, 0x1, 0x2, 0x7fffffff, 0x80000001, 0x80000001, 0xfffffffe, 0xffffffff, 0, 0x1, 0x2, 0x7fffffff, 0xfffffffe, 0xfffffffe, 0xfffffffe, 0xffffffff, 0, 0x1, 0x2, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff};
#define NR_DATA (sizeof(test_data) / sizeof(test_data[0]))
int main() {
int i, j, ans_idx = 0;
for(i = 0; i < NR_DATA; i ++) {
for(j = 0; j < NR_DATA; j ++) {
nemu_assert(max(test_data[i], test_data[j]) == ans[ans_idx ++]);
}
}
HIT_GOOD_TRAP;
return 0;
}

29
apps/cputest/min3.c Normal file

File diff suppressed because one or more lines are too long

27
apps/cputest/mov-c.c Normal file
View File

@ -0,0 +1,27 @@
#include "trap.h"
int A[10];
int b;
int main() {
A[0] = 0;
A[1] = 1;
A[2] = 2;
A[3] = 3;
A[4] = 4;
b = A[3];
A[5] = b;
nemu_assert(A[0] == 0);
nemu_assert(A[1] == 1);
nemu_assert(A[2] == 2);
nemu_assert(A[3] == 3);
nemu_assert(A[4] == 4);
nemu_assert(b == 3);
nemu_assert(A[5] == 3);
HIT_GOOD_TRAP;
return 0;
}

35
apps/cputest/movsx.c Normal file
View File

@ -0,0 +1,35 @@
#include "trap.h"
int A[10];
int b;
char C[10];
int main() {
A[0] = 0;
A[1] = 1;
A[2] = 2;
A[3] = 3;
A[4] = 4;
b = A[3];
A[5] = b;
C[0] = 'a';
nemu_assert(C[0] == 'a');
C[1] = C[0];
nemu_assert(C[1] == 'a');
A[0] = (int)C[0];
nemu_assert(A[0] == 'a');
C[1] = 0x80;
A[0] = (int)C[1];
nemu_assert(A[1] == 1);
nemu_assert(A[2] == 2);
nemu_assert(A[3] == 3);
nemu_assert(A[4] == 4);
nemu_assert(b == 3);
nemu_assert(A[5] == 3);
nemu_assert(C[1] == 0xffffff80);
nemu_assert(A[0] == 0xffffff80);
HIT_GOOD_TRAP;
return 0;
}

View File

@ -0,0 +1,25 @@
#include "trap.h"
long long mul(long long a,long long b) {
long long ans = a*b;
return ans;
}
int test_data[] = { 0xaeb1c2aa, 0x4500ff2b, 0x877190af, 0x11f42438};
long long ans[] = { 0x19d29ab9db1a18e4LL, 0xea15986d3ac3088eLL, 0x2649e980fc0db236LL, 0xfa4c43da0a4a7d30LL, 0x1299898e2c56b139LL, 0xdf8123d50a319e65LL, 0x4d6dfa84c15dd68LL, 0x38c5d79b9e4357a1LL, 0xf78b91cb1efc4248LL, 0x14255a47fdfcc40LL};
#define NR_DATA (sizeof(test_data) / sizeof(test_data[0]))
int main() {
int i,j,ans_idx = 0;
for (i = 0;i < NR_DATA;i++) {
for (j = i;j < NR_DATA;j++) {
nemu_assert(ans[ans_idx++] == mul(test_data[i],test_data[j]));
}
}
HIT_GOOD_TRAP;
return 0;
}

28
apps/cputest/pascal.c Normal file
View File

@ -0,0 +1,28 @@
#include "trap.h"
//#include "stdio.h"
#define N 31
int a[N][N];
int ans[] = {1, 30, 435, 4060, 27405, 142506, 593775, 2035800, 5852925, 14307150, 30045015, 54627300, 86493225, 119759850, 145422675, 155117520, 145422675, 119759850, 86493225, 54627300, 30045015, 14307150, 5852925, 2035800, 593775, 142506, 27405, 4060, 435, 30, 1};
int main() {
int i, j;
for(i = 0; i < N; i ++) {
a[i][0] = a[i][i] = 1;
}
for(i = 2; i < N; i ++) {
for(j = 1; j < i; j ++) {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
for(j = 0; j <= 30; j ++) {
nemu_assert(a[30][j] == ans[j]);
}
HIT_GOOD_TRAP;
return 0;
}

26
apps/cputest/prime.c Normal file
View File

@ -0,0 +1,26 @@
#include "trap.h"
int ans[] = {101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199};
int main() {
int m, i, n = 0;
int prime;
for(m = 101; m <= 200; m += 2) {
prime = 1;
for(i = 2; i < m; i ++) {
if(m % i == 0) {
prime = 0;
break;
}
}
if(prime) {
nemu_assert(i == ans[n]);
n ++;
}
}
nemu_assert(n == 21);
HIT_GOOD_TRAP;
return 0;
}

View File

@ -0,0 +1,25 @@
#include "trap.h"
#include "FLOAT.h"
/* solve 0.5x^2 + 0.5x - 0.5 = 0 */
int main() {
FLOAT a = f2F(0.5);
FLOAT b = f2F(0.5);
FLOAT c = f2F(-0.5);
FLOAT dt = F_mul_F(b, b) - F_mul_F(F_mul_int(a, 4), c);
FLOAT sqrt_dt = sqrt(dt);
FLOAT x1 = F_div_F(-b + sqrt_dt, F_mul_int(a, 2));
FLOAT x2 = F_div_F(-b - sqrt_dt, F_mul_int(a, 2));
FLOAT x1_ans = f2F(0.618);
FLOAT x2_ans = f2F(-1.618);
nemu_assert(Fabs(x1_ans - x1) < f2F(1e-4));
nemu_assert(Fabs(x2_ans - x2) < f2F(1e-4));
HIT_GOOD_TRAP;
return 0;
}

47
apps/cputest/quick-sort.c Normal file
View File

@ -0,0 +1,47 @@
#include "trap.h"
#define N 100
int a[N] = {81, 37, 64, 23, 38, 65, 56, 15, 8, 33, 85, 39, 71, 12, 77, 6, 82, 89, 80, 35, 0, 59, 73, 4, 61, 30, 74, 69, 13, 42, 68, 63, 9, 29, 47, 36, 99, 25, 21, 14, 60, 3, 2, 18, 26, 83, 53, 5, 43, 67, 88, 70, 76, 92, 94, 48, 34, 49, 66, 95, 78, 62, 32, 52, 16, 72, 27, 28, 22, 40, 84, 91, 96, 57, 87, 51, 98, 1, 10, 11, 24, 20, 19, 31, 7, 97, 50, 86, 79, 17, 75, 55, 93, 44, 58, 54, 45, 41, 90, 46};
int partition(int *a, int p, int q) {
int pivot = a[p];
int i = p, j = q;
while(i < j) {
while(i < j && a[j] > pivot) j --;
a[i] = a[j];
while(i < j && a[i] <= pivot) i ++;
a[j] = a[i];
}
a[i] = pivot;
return i;
}
void quick_sort(int *a, int p, int q) {
if(p >= q) return;
int m = partition(a, p, q);
quick_sort(a, p, m - 1);
quick_sort(a, m + 1, q);
}
int main() {
quick_sort(a, 0, N - 1);
int i;
for(i = 0; i < N; i ++) {
nemu_assert(a[i] == i);
}
quick_sort(a, 0, N - 1);
for(i = 0; i < N; i ++) {
nemu_assert(a[i] == i);
}
HIT_GOOD_TRAP;
return 0;
}

View File

@ -0,0 +1,40 @@
#include "trap.h"
#define N 100
int a[N] = {81, 37, 64, 23, 38, 65, 56, 15, 8, 33, 85, 39, 71, 12, 77, 6, 82, 89, 80, 35, 0, 59, 73, 4, 61, 30, 74, 69, 13, 42, 68, 63, 9, 29, 47, 36, 99, 25, 21, 14, 60, 3, 2, 18, 26, 83, 53, 5, 43, 67, 88, 70, 76, 92, 94, 48, 34, 49, 66, 95, 78, 62, 32, 52, 16, 72, 27, 28, 22, 40, 84, 91, 96, 57, 87, 51, 98, 1, 10, 11, 24, 20, 19, 31, 7, 97, 50, 86, 79, 17, 75, 55, 93, 44, 58, 54, 45, 41, 90, 46};
void select_sort() {
int i, j, k, t;
for(i = 0; i < N - 1; i ++) {
k = i;
for(j = i + 1; j < N; j ++) {
if(a[j] < a[k]) {
k = j;
}
}
t = a[i];
a[i] = a[k];
a[k] = t;
}
}
int main() {
select_sort();
int i;
for(i = 0; i < N; i ++) {
nemu_assert(a[i] == i);
}
select_sort();
for(i = 0; i < N; i ++) {
nemu_assert(a[i] == i);
}
HIT_GOOD_TRAP;
return 0;
}

40
apps/cputest/shift.c Normal file
View File

@ -0,0 +1,40 @@
#include "trap.h"
#define ARR_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
unsigned test[] = {
0x12345678, 0x98765432, 0x0, 0xeffa1000, 0x7fffffff, 0x80000000, 0x33, 0xffffffff
};
unsigned srl_ans[] = {
0x2468ac, 0x130eca8, 0x0, 0x1dff420, 0xffffff, 0x1000000, 0x0, 0x1ffffff
};
unsigned srlv_ans[] = {
0x1234567, 0x4c3b2a1, 0x0, 0x1dff420, 0x7fffff, 0x400000, 0x0, 0x1fffff
};
unsigned srav_ans[] = {
0x1234567, 0xfcc3b2a1, 0x0, 0xffdff420, 0x7fffff, 0xffc00000, 0x0, 0xffffffff
};
int main() {
unsigned i;
for(i = 0; i < ARR_SIZE(test); i ++) {
nemu_assert((test[i] >> 7) == srl_ans[i]);
}
for(i = 0; i < ARR_SIZE(test); i ++) {
nemu_assert((unsigned)((int)test[i] >> (i + 4)) == srav_ans[i]);
}
for(i = 0; i < ARR_SIZE(test); i ++) {
nemu_assert((test[i] >> (i + 4)) == srlv_ans[i]);
}
HIT_GOOD_TRAP;
return 0;
}

View File

@ -0,0 +1,28 @@
#include "trap.h"
int ans[] = {153, 370, 371, 407};
int cube(int n) {
return n * n * n;
}
int main() {
int n, n2, n1, n0;
int k = 0;
for(n = 100; n < 1000; n ++) {
n2 = n / 100;
n1 = (n / 10) % 10;
n0 = n % 10;
if(n == cube(n2) + cube(n1) + cube(n0)) {
nemu_assert(n == ans[k]);
k ++;
}
}
nemu_assert(k == 4);
HIT_GOOD_TRAP;
return 0;
}

29
apps/cputest/string.c Normal file
View File

@ -0,0 +1,29 @@
#include "trap.h"
#include <string.h>
char *s[] = {
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
", World!\n",
"Hello, World!\n",
"#####"
};
char str1[] = "Hello";
char str[20];
int main() {
nemu_assert(strcmp(s[0], s[2]) == 0);
nemu_assert(strcmp(s[0], s[1]) == -1);
nemu_assert(strcmp(s[0] + 1, s[1] + 1) == -1);
nemu_assert(strcmp(s[0] + 2, s[1] + 2) == -1);
nemu_assert(strcmp(s[0] + 3, s[1] + 3) == -1);
nemu_assert(strcmp( strcat(strcpy(str, str1), s[3]), s[4]) == 0);
nemu_assert(memcmp(memset(str, '#', 5), s[5], 5) == 0);
HIT_GOOD_TRAP;
return 0;
}

32
apps/cputest/struct.c Normal file
View File

@ -0,0 +1,32 @@
#include "trap.h"
#define N 100
struct dummy {
int pad1[N];
char pad2[N];
} d;
__attribute__((noinline))
struct dummy fun(struct dummy a) {
return a;
}
int main() {
int i;
for(i = 0; i < N; i ++) {
d.pad1[i] = i + 128;
d.pad2[i] = i;
}
struct dummy t = fun(d);
for(i = 0; i < N; i ++) {
nemu_assert(t.pad1[i] == i + 128);
nemu_assert(t.pad2[i] == i);
}
HIT_GOOD_TRAP;
return 0;
}

View File

@ -0,0 +1,24 @@
#include "trap.h"
long long sub(long long a, long long b) {
long long c = a - b;
return c;
}
long long test_data[] = {0, 1, 2, 0x7fffffffffffffffLL, 0x8000000000000000LL, 0x8000000000000001LL, 0xfffffffffffffffeLL, 0xffffffffffffffffLL};
long long ans[] = {0LL, 0xffffffffffffffffLL, 0xfffffffffffffffeLL, 0x8000000000000001LL, 0x8000000000000000LL, 0x7fffffffffffffffLL, 0x2LL, 0x1LL, 0x1LL, 0LL, 0xffffffffffffffffLL, 0x8000000000000002LL, 0x8000000000000001LL, 0x8000000000000000LL, 0x3LL, 0x2LL, 0x2LL, 0x1LL, 0LL, 0x8000000000000003LL, 0x8000000000000002LL, 0x8000000000000001LL, 0x4LL, 0x3LL, 0x7fffffffffffffffLL, 0x7ffffffffffffffeLL, 0x7ffffffffffffffdLL, 0LL, 0xffffffffffffffffLL, 0xfffffffffffffffeLL, 0x8000000000000001LL, 0x8000000000000000LL, 0x8000000000000000LL, 0x7fffffffffffffffLL, 0x7ffffffffffffffeLL, 0x1LL, 0LL, 0xffffffffffffffffLL, 0x8000000000000002LL, 0x8000000000000001LL, 0x8000000000000001LL, 0x8000000000000000LL, 0x7fffffffffffffffLL, 0x2LL, 0x1LL, 0LL, 0x8000000000000003LL, 0x8000000000000002LL, 0xfffffffffffffffeLL, 0xfffffffffffffffdLL, 0xfffffffffffffffcLL, 0x7fffffffffffffffLL, 0x7ffffffffffffffeLL, 0x7ffffffffffffffdLL, 0LL, 0xffffffffffffffffLL, 0xffffffffffffffffLL, 0xfffffffffffffffeLL, 0xfffffffffffffffdLL, 0x8000000000000000LL, 0x7fffffffffffffffLL, 0x7ffffffffffffffeLL, 0x1LL, 0LL};
#define NR_DATA (sizeof(test_data) / sizeof(test_data[0]))
int main() {
int i, j, ans_idx = 0;
for(i = 0; i < NR_DATA; i ++) {
for(j = 0; j < NR_DATA; j ++) {
nemu_assert(sub(test_data[i], test_data[j]) == ans[ans_idx ++]);
}
}
HIT_GOOD_TRAP;
return 0;
}

14
apps/cputest/sum.c Normal file
View File

@ -0,0 +1,14 @@
#include "trap.h"
int main() {
int i = 1, sum = 0;
while(i <= 100) {
sum += i;
i ++;
}
nemu_assert(sum == 5050);
HIT_GOOD_TRAP;
return 0;
}

29
apps/cputest/switch.c Normal file
View File

@ -0,0 +1,29 @@
#include "trap.h"
int switch_case(int n) {
int ret;
switch(n) {
case 0: ret = 0; break;
case 1: ret = 2; break;
case 2: case 3: ret = 5; break;
case 4: case 5: case 6: case 7: ret = 8; break;
case 8: case 9: case 10: case 11: ret = 10; break;
case 12: ret = 15; break;
default: ret = -1; break;
}
return ret;
}
int ans[] = {-1, 0, 2, 5, 5, 8, 8, 8, 8, 10, 10, 10, 10, 15, -1};
int main() {
int i;
for(i = 0; i < 15; i ++) {
nemu_assert(switch_case(i - 1) == ans[i]);
}
HIT_GOOD_TRAP;
return 0;
}

16
apps/cputest/swl.c Normal file
View File

@ -0,0 +1,16 @@
#include "trap.h"
unsigned x = 0xffffffff;
int main() {
*((unsigned*)0x1003) = 0xaabbccdd;
x = *((unsigned*)0x1003);
nemu_assert(x == 0xaabbccdd);
HIT_GOOD_TRAP;
return 0;
}

View File

@ -0,0 +1,20 @@
#include "trap.h"
char to_lower_case(char c) {
return (c >= 'A' && c <= 'Z' ? (c + 32) : c);
}
char ans [] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127};
int main() {
int i;
for(i = 0; i < 128; i ++) {
nemu_assert(to_lower_case(i) == ans[i]);
}
HIT_GOOD_TRAP;
return 0;
}

14
apps/cputest/trap.h Normal file
View File

@ -0,0 +1,14 @@
#ifndef __TRAP_H__
#define __TRAP_H__
#define HIT_GOOD_TRAP \
do { \
_halt(0); \
} while (0)
__attribute__((noinline))
void nemu_assert(int cond) {
if (!cond) _halt(1);
}
#endif

26
apps/cputest/wanshu.c Normal file
View File

@ -0,0 +1,26 @@
#include "trap.h"
int ans[] = {6, 28, 496};
int main() {
int n, sum, i, k = 0;
for(n = 1; n < 500; n ++) {
sum = 0;
for(i = 1; i < n; i ++) {
if(n % i == 0) {
sum += i;
}
}
if(sum == n) {
nemu_assert(n == ans[k]);
k ++;
}
}
nemu_assert(k == 3);
HIT_GOOD_TRAP;
return 0;
}