├── 实验一 ├── mychangename.c ├── mysetnice.c ├── myshowname.c ├── sys.c ├── 实验一.docx └── 新建文本文档.txt ├── 实验三 ├── msgsar │ ├── Makefile │ ├── receiver.c │ ├── sar.h │ ├── sender1.c │ └── sender2.c ├── pipe │ ├── Makefile │ ├── fifo.c │ ├── newfifo.c │ └── pipe.c ├── sharemy │ ├── Makefile │ ├── mreceiver.c │ ├── msar.h │ └── msender.c └── shell │ ├── Makefile │ ├── cmd1.c │ ├── cmd2.c │ ├── cmd3.c │ └── shell.c ├── 实验二 ├── Makefile1 ├── Makefile2 ├── allkt.c └── pstree.c └── 实验五 └── FileSystem ├── .gitattributes ├── .gitignore ├── FileSystem.sln ├── FileSystem.vcxproj ├── FileSystem.vcxproj.filters ├── block.c ├── block.h ├── block.txt ├── file.c ├── file.h ├── index.c ├── index.h ├── index.txt └── shell.c /实验一/mychangename.c: -------------------------------------------------------------------------------- 1 | //测试mychangename的系统调用,功能是改变主机名称为自定义字符串的系统调用。 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | /*342 mychangename smlinkage long sys_mychangename(char __user *name,int len);*/ 9 | 10 | int main() 11 | { 12 | long flag = 0; 13 | printf("请输入修改的nodename:"); 14 | char nodename[100]; 15 | fgets(nodename,100,stdin); 16 | flag = syscall(342,nodename,strlen(nodename)); 17 | printf("Nodename:%s\n",nodename); 18 | } 19 | -------------------------------------------------------------------------------- /实验一/mysetnice.c: -------------------------------------------------------------------------------- 1 | //测试mysetnice系统调用的程序,功能是修改nice和prio值的系统调用功能。 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | /*340 mystenice asmlinkage long sys_mysetnice(pid_t pid,int flag,int nicevalue,void __user *prio,void __user *nice);*/ 8 | 9 | int main() 10 | { 11 | pid_t pid; 12 | char strin[100]; 13 | int nicevalue = 3100; 14 | int flag = 2; 15 | int p = 0; 16 | int n = 0; 17 | int *prio; 18 | int *nice; 19 | prio = &p; 20 | nice = &n; 21 | while(1) 22 | { 23 | printf("输入0查看nice和prio,输入1修改nice和prio,输入其他值退出。\n"); 24 | /* 25 | * 获取flag; 26 | * */ 27 | scanf("%d",&flag); 28 | if(flag != 0 && flag != 1) 29 | { 30 | return 0; 31 | } 32 | /* 33 | * 获取pid 34 | * */ 35 | printf("请输入pid:\n"); 36 | scanf("%d",&pid); 37 | /* 38 | * 获取nice; 39 | * */ 40 | if(flag == 1) 41 | { 42 | printf("请输入nice:\n"); 43 | scanf("%d",&nicevalue); 44 | if(nicevalue < -20 || nicevalue > 19) 45 | { 46 | printf("nice值非法\n"); 47 | continue; 48 | } 49 | } 50 | /* 51 | * 调用添加的系统调用; 52 | * */ 53 | syscall(340,pid,flag,nicevalue,prio,nice); 54 | /* 55 | * 输出最新的prio以及nice; 56 | * */ 57 | printf("现在的nice为%d\n现在的prio为%d\n输入任意建继续\n",n,p); 58 | getchar(); 59 | fgets(strin,100,stdin); 60 | system("clear"); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /实验一/myshowname.c: -------------------------------------------------------------------------------- 1 | //测试myshowname系统调用的程序,功能是显示当前系统名称和版本的系统调用。 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | /*341 myshow name asmlinkage long sys_myshowname(void __user *sysname,void __user *release,void __user *version);*/ 8 | 9 | int main() 10 | { 11 | char sysname[100],release[100],version[100]; 12 | syscall(341,sysname,release,version); 13 | printf("Sysname:%s\nRelease:%s\nVersion:%s\n",sysname,release,version); 14 | } 15 | -------------------------------------------------------------------------------- /实验一/sys.c: -------------------------------------------------------------------------------- 1 | //mysetnice系统调用,功能是修改nice和prio值的系统调用功能。 2 | SYSCALL_DEFINE5(mysetnice,pid_t,pid,int,flag,int,nicevalue,void __user*,prio,void __user*,nice){ 3 | struct pid * kpid; 4 | struct task_struct * task; 5 | kpid = find_get_pid(pid);/* 返回pid */ 6 | task = pid_task(kpid, PIDTYPE_PID);/* 返回task_struct */ 7 | int n; 8 | n = task_nice(task);/* 返回进程当前nice值 */ 9 | int p; 10 | p = task_prio(task);/*返回进程当前prio值*/ 11 | if(flag == 1) 12 | { 13 | printk("Change nice: %d ,prio: %d ",n,p); 14 | set_user_nice(task, nicevalue);/* 修改进程nice值 */ 15 | n = task_nice(task);/*重新取得进程nice值*/ 16 | p = task_prio(task);/*重新获取进程prio值 这里和参考资料不一样!!! */ 17 | printk("to nice: %d ,prio: %d\n",n,p); 18 | copy_to_user(nice,&n,sizeof(n));/*将nice值拷贝到用户空间*/ 19 | copy_to_user(prio,&p,sizeof(p));/*将prio值拷贝到用户空间*/ 20 | return 0; 21 | } 22 | else if(flag == 0) 23 | { 24 | printk("nice : %d ,prio: %d\n",n,p); 25 | copy_to_user(nice,&n,sizeof(n));/*将nice值拷贝到用户空间*/ 26 | copy_to_user(prio,&p,sizeof(p));/*将prio值拷贝到用户空间*/ 27 | return 0; 28 | } 29 | return EFAULT; 30 | } 31 | 32 | //myshowname系统调用,功能是显示当前系统名称和版本的系统调用。 33 | SYSCALL_DEFINE3(myshowname,void __user*,sysname,void __user*,release,void __user*,version) 34 | { 35 | struct old_utsname tmp; 36 | 37 | down_read(&uts_sem); 38 | memcpy(&tmp, utsname(), sizeof(tmp)); 39 | up_read(&uts_sem); 40 | 41 | copy_to_user(sysname,&tmp.sysname,sizeof(tmp.sysname));/*将sysname值拷贝到用户空间*/ 42 | copy_to_user(release,&tmp.release,sizeof(tmp.release));/*将release值拷贝到用户空间*/ 43 | copy_to_user(version,&tmp.version,sizeof(tmp.version));/*将version值拷贝到用户空间*/ 44 | 45 | printk("sysname = %s \n",tmp.sysname); 46 | printk("release = %s \n",tmp.release); 47 | printk("version = %s \n",tmp.version); 48 | 49 | return 0; 50 | } 51 | 52 | //mychangename系统调用,功能是改变主机名称为自定义字符串的系统调用。 53 | SYSCALL_DEFINE2(mychangename,char __user*,name,int,len) 54 | { 55 | int errno; 56 | char tmp[__NEW_UTS_LEN]; 57 | 58 | if (len < 0 || len > __NEW_UTS_LEN) 59 | return -EINVAL; 60 | errno = -EFAULT; 61 | if (!copy_from_user(tmp, name, len)) { 62 | struct new_utsname *u; 63 | down_write(&uts_sem); 64 | u = utsname(); 65 | memcpy(u->nodename, tmp, len); 66 | memset(u->nodename + len, 0, sizeof(u->nodename) - len); 67 | errno = 0; 68 | uts_proc_notify(UTS_PROC_HOSTNAME); 69 | up_write(&uts_sem); 70 | printk("change nodename to %s\n",tmp); 71 | } 72 | return errno; 73 | } 74 | -------------------------------------------------------------------------------- /实验一/实验一.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plussone/HDU-operation-system-course-design-code/d0f1602dc5c3615d7a676a8d46d54e8bb93c7d16/实验一/实验一.docx -------------------------------------------------------------------------------- /实验一/新建文本文档.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plussone/HDU-operation-system-course-design-code/d0f1602dc5c3615d7a676a8d46d54e8bb93c7d16/实验一/新建文本文档.txt -------------------------------------------------------------------------------- /实验三/msgsar/Makefile: -------------------------------------------------------------------------------- 1 | all: sender1 sender2 receiver 2 | sender1: sender1.c 3 | gcc sender1.c -pthread -o sender1 4 | sender2: sender2.c 5 | gcc sender2.c -pthread -o sender2 6 | receiver: receiver.c 7 | gcc receiver.c -pthread -o receiver 8 | clean: 9 | rm sender1 sender2 receiver 10 | -------------------------------------------------------------------------------- /实验三/msgsar/receiver.c: -------------------------------------------------------------------------------- 1 | //receiver.c 2 | #include "sar.h" 3 | 4 | int main() 5 | { 6 | int msgid; 7 | int flag_over1 = 0; 8 | int flag_over2 = 0; 9 | struct my_msgbuf r_msg;//消息接受区 10 | struct my_msgbuf s_msg; 11 | 12 | msgid = msgget(IPC_PRIVATE, 0666|IPC_CREAT); 13 | 14 | sem_unlink("send"); 15 | sem_unlink("receive"); 16 | sem_unlink("over1"); 17 | sem_unlink("over2"); 18 | 19 | init_signal(); 20 | 21 | mkfifo(fifofile1,0666); 22 | mkfifo(fifofile2,0666); 23 | 24 | fd1=open(fifofile1,O_WRONLY); 25 | fd2=open(fifofile2,O_WRONLY); 26 | write(fd1,&msgid,sizeof(int)); 27 | sem_post(sem_over1); 28 | write(fd2,&msgid,sizeof(int)); 29 | sem_post(sem_over2); 30 | 31 | //id = (unsigned int)pthread_self(); 32 | s_msg.mtype = 2; 33 | s_msg.sendid = 3; 34 | 35 | printf("tid:%u 进程(线程)3:\n", (unsigned int)pthread_self()); 36 | 37 | while (1) 38 | { 39 | sem_wait(sem_receive); 40 | msgrcv(msgid, &r_msg, sizeof(struct my_msgbuf), 0, 0); 41 | printf("收到线程%u的消息: %s\n", r_msg.sendid, r_msg.mtext); 42 | 43 | if (r_msg.sendid == 1) 44 | { 45 | if (strcmp(r_msg.mtext, "end1") == 0) 46 | { 47 | printf("发送给线程1:over1\n"); 48 | strcpy(s_msg.mtext, "over1"); 49 | msgsnd(msgid, &s_msg, sizeof(struct my_msgbuf), 0); 50 | 51 | sem_post(sem_over1); 52 | flag_over1 = 1; 53 | } 54 | else 55 | { 56 | sem_post(sem_send); 57 | } 58 | } 59 | else if(r_msg.sendid == 2) 60 | { 61 | if (strcmp(r_msg.mtext, "end2") == 0) 62 | { 63 | printf("发送给线程2:over2\n");\ 64 | strcpy(s_msg.mtext, "over2"); 65 | msgsnd(msgid, &s_msg, sizeof(struct my_msgbuf), 0); 66 | 67 | sem_post(sem_over2); 68 | flag_over2 = 1; 69 | } 70 | else 71 | { 72 | sem_post(sem_send); 73 | } 74 | } 75 | 76 | if (flag_over1 && flag_over2) 77 | break; 78 | } 79 | 80 | 81 | sem_unlink("send"); 82 | sem_unlink("receive"); 83 | sem_unlink("over1"); 84 | sem_unlink("over2"); 85 | 86 | return 0; 87 | } 88 | -------------------------------------------------------------------------------- /实验三/msgsar/sar.h: -------------------------------------------------------------------------------- 1 | //线程间的通信sar.h 2 | //IPC消息队列 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | #include 18 | #include //信号量头文件 19 | 20 | #define fifofile1 "/tmp/fifomy1" 21 | #define fifofile2 "/tmp/fifomy2" 22 | 23 | int fd1,fd2;//消息队列标识符 24 | //struct my_msgbuf r_msg;//消息接受区 25 | //struct my_msgbuf s_msg; 26 | 27 | sem_t *sem_send; 28 | sem_t *sem_receive; 29 | sem_t *sem_over1; 30 | sem_t *sem_over2; 31 | sem_t *sem_receive1; 32 | sem_t *sem_receive2; 33 | 34 | //缓冲区mymsg 35 | struct my_msgbuf 36 | { 37 | long mtype;//消息类型1为发送者的消息,2为接收的消息。 38 | int sendid;//1为发送者1,2为发送者2。 39 | char mtext[100]; 40 | }; 41 | 42 | void init_signal() 43 | { 44 | //初始化信号量 45 | sem_send = sem_open("send", O_CREAT, 0666, 1); 46 | sem_receive = sem_open("receive", O_CREAT, 0666, 0); 47 | sem_over1 = sem_open("over1", O_CREAT, 0666, 0); 48 | sem_over2 = sem_open("over2", O_CREAT, 0666, 0); 49 | } 50 | -------------------------------------------------------------------------------- /实验三/msgsar/sender1.c: -------------------------------------------------------------------------------- 1 | //sender1.c 2 | #include "sar.h" 3 | 4 | int main() 5 | { 6 | char str[100]; 7 | int msgid; 8 | struct my_msgbuf r_msg;//消息接受区 9 | struct my_msgbuf s_msg; 10 | 11 | init_signal(); 12 | 13 | fd1=open(fifofile1,O_RDONLY); 14 | sem_wait(sem_over1); 15 | read(fd1,&msgid,sizeof(int)); 16 | 17 | s_msg.mtype = 1; 18 | s_msg.sendid = 1; 19 | 20 | printf("tid:%u 进程(线程)1: \n", (unsigned int)pthread_self()); 21 | 22 | while(1) 23 | { 24 | printf("发送:"); 25 | scanf("%[^\n]%*c",str); 26 | 27 | sem_wait(sem_send); 28 | 29 | if(strcmp(str, "exit") == 0) 30 | { 31 | strcpy(s_msg.mtext, "end1"); 32 | msgsnd(msgid, &s_msg, sizeof(struct my_msgbuf), 0); 33 | sem_post(sem_receive); 34 | break; 35 | } 36 | 37 | strcpy(s_msg.mtext, str); 38 | msgsnd(msgid, &s_msg, sizeof(struct my_msgbuf), 0); 39 | sem_post(sem_receive); 40 | } 41 | sem_wait(sem_over1); 42 | 43 | msgrcv(msgid, &r_msg, sizeof(struct my_msgbuf), 0, 0); 44 | printf("收到线程%u的消息: %s\n", r_msg.sendid, r_msg.mtext); 45 | 46 | sem_post(sem_send); 47 | return 0; 48 | } 49 | -------------------------------------------------------------------------------- /实验三/msgsar/sender2.c: -------------------------------------------------------------------------------- 1 | //sender2.c 2 | #include "sar.h" 3 | 4 | int main() 5 | { 6 | char str[100]; 7 | int msgid; 8 | struct my_msgbuf r_msg;//消息接受区 9 | struct my_msgbuf s_msg; 10 | 11 | init_signal(); 12 | 13 | fd2 = open(fifofile2,O_RDONLY); 14 | sem_wait(sem_over2); 15 | read(fd2,&msgid,sizeof(int)); 16 | 17 | s_msg.mtype = 1; 18 | s_msg.sendid= 2; 19 | 20 | printf("tid:%u 进程(线程)2:\n",(unsigned int)pthread_self()); 21 | 22 | while(1) 23 | { 24 | printf("发送:"); 25 | scanf("%[^\n]%*c",str); 26 | 27 | sem_wait(sem_send); 28 | 29 | if(strcmp(str, "exit") == 0) 30 | { 31 | strcpy(s_msg.mtext, "end2"); 32 | msgsnd(msgid, &s_msg, sizeof(struct my_msgbuf), 0); 33 | sem_post(sem_receive); 34 | break; 35 | } 36 | 37 | strcpy(s_msg.mtext, str); 38 | msgsnd(msgid, &s_msg, sizeof(struct my_msgbuf), 0); 39 | sem_post(sem_receive); 40 | } 41 | 42 | sem_wait(sem_over2); 43 | 44 | msgrcv(msgid, &r_msg, sizeof(struct my_msgbuf), 0, 0); 45 | printf("收到线程%u的消息: %s\n", r_msg.sendid, r_msg.mtext); 46 | 47 | sem_post(sem_send); 48 | return 0; 49 | } 50 | -------------------------------------------------------------------------------- /实验三/pipe/Makefile: -------------------------------------------------------------------------------- 1 | all: pipe fifo newfifo 2 | pipe : 3 | gcc pipe.c -o pipe -pthread 4 | fifo : 5 | gcc fifo.c -o fifo -pthread 6 | newfifo : 7 | gcc newfifo.c -o newfifo -pthread 8 | clean : 9 | rm pipe fifo newfifo 10 | -------------------------------------------------------------------------------- /实验三/pipe/fifo.c: -------------------------------------------------------------------------------- 1 | //实现有名管道通信程序。 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #define fifofile "./fifomy" 11 | 12 | int main() 13 | { 14 | int fd,pipe_num; 15 | char buf[150]; 16 | sem_t *Mutex; 17 | sem_t *send1,*send2,*send3; 18 | sem_t *receive1,*receive2,*receive3; 19 | pid_t pid1,pid2,pid3; 20 | 21 | memset(buf,0,sizeof(buf)); 22 | sem_unlink("Mutex"); 23 | sem_unlink("send1"); 24 | sem_unlink("send2"); 25 | sem_unlink("send3"); 26 | sem_unlink("receive1"); 27 | sem_unlink("receive2"); 28 | sem_unlink("receive3"); 29 | 30 | Mutex = sem_open("Mutex",O_CREAT,0666,1); 31 | send1 = sem_open("send1",O_CREAT,0666,1); 32 | send2 = sem_open("send2",O_CREAT,0666,1); 33 | send3 = sem_open("send3",O_CREAT,0666,1); 34 | receive1 = sem_open("receive1",O_CREAT,0666,0); 35 | receive2 = sem_open("receive2",O_CREAT,0666,0); 36 | receive3 = sem_open("receive3",O_CREAT,0666,0); 37 | 38 | 39 | mkfifo(fifofile,0666); 40 | 41 | pid1 = fork(); 42 | if(pid1 > 0) 43 | { 44 | pid2 = fork(); 45 | if(pid2 > 0) 46 | { 47 | pid3 = fork(); 48 | } 49 | } 50 | 51 | if(pid1 < 0 || pid2 < 0 || pid3 <0) 52 | { 53 | sem_unlink(Mutex); 54 | sem_unlink(send1); 55 | sem_unlink(send2); 56 | sem_unlink(send3); 57 | sem_unlink(receive1); 58 | sem_unlink(receive2); 59 | sem_unlink(receive3); 60 | printf("fork error\n"); 61 | return 2; 62 | } 63 | 64 | if(pid1 == 0) 65 | { 66 | fd=open(fifofile,O_WRONLY); 67 | sem_wait(send1); 68 | sem_wait(Mutex); 69 | printf("pid:%d 进程1放入数据:",getpid()); 70 | scanf("%[^\n]%*c",buf); 71 | write(fd,buf,strlen(buf)); 72 | close(fd); 73 | sleep(1); 74 | sem_post(Mutex); 75 | sem_post(receive1); 76 | } 77 | else if(pid2 == 0) 78 | { 79 | fd=open(fifofile,O_WRONLY); 80 | sem_wait(send2); 81 | sem_wait(Mutex); 82 | printf("pid:%d 进程2放入数据:",getpid()); 83 | scanf("%[^\n]%*c",buf); 84 | write(fd,buf,strlen(buf)); 85 | close(fd); 86 | sleep(1); 87 | sem_post(Mutex); 88 | sem_post(receive2); 89 | } 90 | else if(pid3 == 0) 91 | { 92 | fd=open(fifofile,O_WRONLY); 93 | sem_wait(send3); 94 | sem_wait(Mutex); 95 | printf("pid:%d 进程3放入数据:",getpid()); 96 | scanf("%[^\n]%*c",buf); 97 | write(fd,buf,strlen(buf)); 98 | close(fd); 99 | sleep(1); 100 | sem_post(Mutex); 101 | sem_post(receive3); 102 | } 103 | else 104 | { 105 | fd=open(fifofile,O_RDONLY); 106 | sem_wait(receive1); 107 | sem_wait(receive2); 108 | sem_wait(receive3); 109 | sem_wait(Mutex); 110 | read(fd,buf,150); 111 | printf("pid:%d 父进程接收数据:%s\n",getpid(),buf); 112 | close(fd); 113 | unlink(fifofile); 114 | sleep(1); 115 | sem_post(Mutex); 116 | sem_post(send1); 117 | sem_post(send2); 118 | sem_post(send3); 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /实验三/pipe/newfifo.c: -------------------------------------------------------------------------------- 1 | //统计无名管道的容量程序。 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | int i = 0; 9 | 10 | int *kwrite() 11 | { 12 | int pipefds[2]; 13 | pipe(pipefds); 14 | char buf[1024]; 15 | memset(buf,100,sizeof(buf)); 16 | for (i = 0; i < 1000; ++i) 17 | { 18 | write(pipefds[1], buf, sizeof(buf)); 19 | } 20 | close(pipefds[0]); 21 | close(pipefds[1]); 22 | } 23 | 24 | int main() 25 | { 26 | pthread_t thread; 27 | int lastnum = 0,t=0; 28 | pthread_create(&thread,NULL,kwrite,&i); 29 | while(1) 30 | { 31 | if(i != lastnum) 32 | { 33 | lastnum = i; 34 | t = 0; 35 | } 36 | else 37 | { 38 | t++; 39 | if(t == 100000) 40 | { 41 | printf("管道大小为: %dk\n", i * 1); 42 | break; 43 | } 44 | } 45 | } 46 | return 0; 47 | } 48 | -------------------------------------------------------------------------------- /实验三/pipe/pipe.c: -------------------------------------------------------------------------------- 1 | //实现无名管道通信程序。 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #define MAX_PIPE_CAPACIPY 100 11 | 12 | int main() 13 | { 14 | int fd[2],pipe_num; 15 | char buf[150]; 16 | sem_t *Mutex; 17 | sem_t *send1,*send2,*send3; 18 | sem_t *receive1,*receive2,*receive3; 19 | pid_t pid1,pid2,pid3; 20 | 21 | memset(buf,0,sizeof(buf)); 22 | sem_unlink("Mutex"); 23 | sem_unlink("send1"); 24 | sem_unlink("send2"); 25 | sem_unlink("send3"); 26 | sem_unlink("receive1"); 27 | sem_unlink("receive2"); 28 | sem_unlink("receive3"); 29 | 30 | Mutex = sem_open("Mutex",O_CREAT,0666,1); 31 | send1 = sem_open("send1",O_CREAT,0666,1); 32 | send2 = sem_open("send2",O_CREAT,0666,1); 33 | send3 = sem_open("send3",O_CREAT,0666,1); 34 | receive1 = sem_open("receive1",O_CREAT,0666,0); 35 | receive2 = sem_open("receive2",O_CREAT,0666,0); 36 | receive3 = sem_open("receive3",O_CREAT,0666,0); 37 | 38 | pipe_num = pipe(fd); 39 | if(pipe_num == -1) 40 | { 41 | printf("pipe create error\n"); 42 | return 1; 43 | } 44 | 45 | pid1 = fork(); 46 | if(pid1 > 0) 47 | { 48 | pid2 = fork(); 49 | if(pid2 > 0) 50 | { 51 | pid3 = fork(); 52 | } 53 | } 54 | 55 | if(pid1 < 0 || pid2 < 0 || pid3 <0) 56 | { 57 | sem_unlink(Mutex); 58 | sem_unlink(send1); 59 | sem_unlink(send2); 60 | sem_unlink(send3); 61 | sem_unlink(receive1); 62 | sem_unlink(receive2); 63 | sem_unlink(receive3); 64 | printf("fork error\n"); 65 | return 2; 66 | } 67 | 68 | if(pid1 == 0) 69 | { 70 | close(fd[0]); 71 | sem_wait(send1); 72 | sem_wait(Mutex); 73 | printf("pid:%d 进程1放入数据:",getpid()); 74 | scanf("%[^\n]%*c",buf); 75 | write(fd[1],buf,strlen(buf)); 76 | sleep(1); 77 | sem_post(Mutex); 78 | sem_post(receive1); 79 | } 80 | else if(pid2 == 0) 81 | { 82 | close(fd[0]); 83 | sem_wait(send2); 84 | sem_wait(Mutex); 85 | printf("pid:%d 进程2放入数据:",getpid()); 86 | scanf("%[^\n]%*c",buf); 87 | write(fd[1],buf,strlen(buf)); 88 | sleep(1); 89 | sem_post(Mutex); 90 | sem_post(receive2); 91 | } 92 | else if(pid3 == 0) 93 | { 94 | close(fd[0]); 95 | sem_wait(send3); 96 | sem_wait(Mutex); 97 | printf("pid:%d 进程3放入数据:",getpid()); 98 | scanf("%[^\n]%*c",buf); 99 | write(fd[1],buf,strlen(buf)); 100 | sleep(1); 101 | sem_post(Mutex); 102 | sem_post(receive3); 103 | } 104 | else 105 | { 106 | close(fd[1]); 107 | sem_wait(receive1); 108 | sem_wait(receive2); 109 | sem_wait(receive3); 110 | sem_wait(Mutex); 111 | read(fd[0],buf,150); 112 | printf("pid:%d 父进程接收数据:%s\n",getpid(),buf); 113 | sleep(1); 114 | sem_post(Mutex); 115 | sem_post(send1); 116 | sem_post(send2); 117 | sem_post(send3); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /实验三/sharemy/Makefile: -------------------------------------------------------------------------------- 1 | all: msender mreceiver 2 | msender: msender.c 3 | gcc msender.c -o msender -pthread 4 | mreceiver: mreceiver.c 5 | gcc mreceiver.c -o mreceiver -pthread 6 | clean: 7 | rm msender mreceiver 8 | -------------------------------------------------------------------------------- /实验三/sharemy/mreceiver.c: -------------------------------------------------------------------------------- 1 | //msender 2 | #include "msar.h" 3 | 4 | pthread_t r_thread, s_thread; 5 | 6 | void *send(void *arg) 7 | { 8 | char temp[MEM_MIN_SIZE], s_str[100]; 9 | while(1) 10 | { 11 | printf("发送:"); 12 | fflush(stdout); 13 | scanf("%[^\n]%*c",s_str); 14 | sem_wait(sem_sender); 15 | sprintf(temp,"%d:%s",*((pid_t *)arg),s_str); 16 | strcpy((char *)shmp, temp); 17 | 18 | sem_post(sem_receiver1); 19 | printf("OK\n"); 20 | if(!strcmp(s_str,"over")) 21 | { 22 | pthread_cancel(r_thread); 23 | shmdt(shmp); 24 | break; 25 | } 26 | } 27 | } 28 | 29 | void *receive(void *arg) 30 | { 31 | int i; 32 | char r_str[100], r_str_end[100], r_str_id[10], *p; 33 | while(1) 34 | { 35 | sem_wait(sem_receiver2); 36 | strcpy(r_str, (char *)shmp); 37 | p = strchr(r_str,':'); 38 | *(p++) = '\0'; 39 | printf("\r接收到进程%s的消息:%s\n", r_str,p); 40 | if(strcmp(p, "over") == 0) 41 | { 42 | pthread_cancel(s_thread); 43 | shmdt(shmp); 44 | shmctl(shmid, IPC_RMID, NULL); 45 | sem_unlink("sender"); 46 | sem_unlink("receiver1"); 47 | sem_unlink("receiver2"); 48 | break; 49 | } 50 | printf("发送:"); 51 | fflush(stdout); 52 | sem_post(sem_sender); 53 | } 54 | } 55 | 56 | int main() 57 | { 58 | pid_t pid = getpid(); 59 | int res1 = 0,res2 = 0; 60 | 61 | init_signal(); 62 | 63 | printf("进程%d启动\n",pid); 64 | res1 = pthread_create(&s_thread,NULL,send,&pid); 65 | res2 = pthread_create(&r_thread,NULL,receive,&pid); 66 | if(res1 || res2) 67 | { 68 | printf("create pthread failed\n"); 69 | return 1; 70 | } 71 | pthread_join(s_thread, NULL); 72 | pthread_join(r_thread, NULL); 73 | printf("进程%d结束\n",pid); 74 | } 75 | -------------------------------------------------------------------------------- /实验三/sharemy/msar.h: -------------------------------------------------------------------------------- 1 | //msar.h 2 | #include 3 | #include 4 | #include 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | #include 17 | #include //信号量头文件 18 | #include 19 | 20 | #define MEM_MIN_SIZE 1024 21 | #define KEY 1111 22 | 23 | sem_t *sem_sender; 24 | sem_t *sem_receiver1; 25 | sem_t *sem_receiver2; 26 | 27 | key_t key; 28 | int shmid; 29 | void *shmp; 30 | 31 | void init_signal() 32 | { 33 | //初始化信号量 34 | sem_sender = sem_open("sender", O_CREAT, 0666, 1); 35 | sem_receiver1 = sem_open("receiver1", O_CREAT, 0666, 0); 36 | sem_receiver2 = sem_open("receiver2", O_CREAT, 0666, 0); 37 | 38 | shmid = shmget(KEY, MEM_MIN_SIZE, 0666|IPC_CREAT); //创建共享内存,key = 0(IPC_PRIVATE) 创建一个新对象。成功则返回id (一个与key相关的标识符) 39 | if(shmid < 0) 40 | { 41 | printf("创建共享内存出错!\n"); 42 | exit(-1); 43 | } 44 | 45 | shmp = shmat(shmid, NULL, 0);//指定共享内存映射到新虚拟地址空间,返回起始地址 46 | if((long long int)shmp == -1) 47 | { 48 | printf("映射内存出错!\n"); 49 | exit(-1); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /实验三/sharemy/msender.c: -------------------------------------------------------------------------------- 1 | //msender 2 | #include "msar.h" 3 | 4 | pthread_t r_thread, s_thread; 5 | 6 | void *send(void *arg) 7 | { 8 | char temp[MEM_MIN_SIZE], s_str[100]; 9 | while(1) 10 | { 11 | printf("发送:"); 12 | fflush(stdout); 13 | scanf("%[^\n]%*c",s_str); 14 | sem_wait(sem_sender); 15 | sprintf(temp,"%d:%s",*((pid_t *)arg),s_str); 16 | strcpy((char *)shmp, temp); 17 | 18 | sem_post(sem_receiver2); 19 | printf("OK\n"); 20 | if(!strcmp(s_str,"over")) 21 | { 22 | pthread_cancel(r_thread); 23 | shmdt(shmp); 24 | break; 25 | } 26 | } 27 | } 28 | 29 | void *receive(void *arg) 30 | { 31 | char r_str[100], r_str_end[100], r_str_id[10], *p; 32 | while(1) 33 | { 34 | sem_wait(sem_receiver1); 35 | strcpy(r_str, (char *)shmp); 36 | p = strchr(r_str,':'); 37 | *(p++) = '\0'; 38 | printf("\r接收到进程%s的消息:%s\n", r_str,p); 39 | if(strcmp(p, "over") == 0) 40 | { 41 | pthread_cancel(s_thread); 42 | shmdt(shmp); 43 | shmctl(shmid, IPC_RMID, NULL); 44 | sem_unlink("sender"); 45 | sem_unlink("receiver1"); 46 | sem_unlink("receiver2"); 47 | break; 48 | } 49 | printf("发送:"); 50 | fflush(stdout); 51 | sem_post(sem_sender); 52 | } 53 | } 54 | 55 | int main() 56 | { 57 | pid_t pid = getpid(); 58 | int res1 = 0,res2 = 0; 59 | 60 | //初始化信号量 61 | sem_unlink("sender"); 62 | sem_unlink("receiver1"); 63 | sem_unlink("receiver2"); 64 | 65 | init_signal(); 66 | 67 | printf("进程%d启动\n",pid); 68 | res1 = pthread_create(&s_thread,NULL,send,&pid); 69 | res2 = pthread_create(&r_thread,NULL,receive,&pid); 70 | 71 | if(res1 || res2) 72 | { 73 | printf("create pthread failed\n"); 74 | return 1; 75 | } 76 | 77 | pthread_join(s_thread, NULL); 78 | pthread_join(r_thread, NULL); 79 | printf("进程%d结束\n",pid); 80 | } 81 | -------------------------------------------------------------------------------- /实验三/shell/Makefile: -------------------------------------------------------------------------------- 1 | all: cmd1 cmd2 cmd3 shell 2 | cmd1 : 3 | gcc cmd1.c -o cmd1 4 | cmd2 : 5 | gcc cmd2.c -o cmd2 6 | cmd3 : 7 | gcc cmd3.c -o cmd3 8 | shell : 9 | gcc shell.c -o shell 10 | clean : 11 | rm cmd1 cmd2 cmd3 shell 12 | -------------------------------------------------------------------------------- /实验三/shell/cmd1.c: -------------------------------------------------------------------------------- 1 | //shell测试程序,输出cmd1。 2 | #include 3 | 4 | int main() 5 | { 6 | printf("cmd1\n"); 7 | } 8 | -------------------------------------------------------------------------------- /实验三/shell/cmd2.c: -------------------------------------------------------------------------------- 1 | //shell测试程序,输出cmd2。 2 | #include 3 | 4 | int main() 5 | { 6 | printf("cmd2\n"); 7 | } 8 | -------------------------------------------------------------------------------- /实验三/shell/cmd3.c: -------------------------------------------------------------------------------- 1 | //shell测试程序,输出cmd3。 2 | #include 3 | 4 | int main() 5 | { 6 | printf("cmd3\n"); 7 | } 8 | -------------------------------------------------------------------------------- /实验三/shell/shell.c: -------------------------------------------------------------------------------- 1 | //实现一个模拟的shell,基本功能加find、grep命令。 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | void clear_space(char *str,char *cmd) 10 | { 11 | int i = 0, j = 0; 12 | while(str[i] == ' ') 13 | { 14 | i++; 15 | } 16 | while(str[i] != ' ') 17 | { 18 | cmd[j++] = str[i++]; 19 | } 20 | cmd[j] = '\0'; 21 | } 22 | 23 | int main() 24 | { 25 | char command[100],cmd[55],token[50]; 26 | int status; 27 | pid_t pid; 28 | while(1) 29 | { 30 | printf("shell:"); 31 | scanf("%[^\n]%*c",command); 32 | status = -1; 33 | clear_space(command,token); 34 | if(!strcmp(token,"cmd1") || !strcmp(token,"cmd2") || !strcmp(token,"cmd3")) 35 | { 36 | pid = fork(); 37 | if(pid < 0) 38 | { 39 | printf("fork error\n"); 40 | } 41 | else if(pid > 0) 42 | { 43 | wait(&status); 44 | } 45 | else 46 | { 47 | sprintf(cmd,"./%s",token); 48 | system(cmd); 49 | exit(0); 50 | } 51 | } 52 | else if(!strcmp(token,"exit")) 53 | { 54 | printf("shell exit\n"); 55 | break ; 56 | } 57 | else if(!strcmp(token,"find") || !strcmp(token,"grep")) 58 | { 59 | system(command); 60 | } 61 | else 62 | { 63 | printf("Command not found\n"); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /实验二/Makefile1: -------------------------------------------------------------------------------- 1 | obj-m := myallkt.o 2 | myallkt-objs := allkt.o 3 | KDIR := /lib/modules/$(shell uname -r)/build 4 | PWD := $(shell pwd) 5 | default: 6 | make -C $(KDIR) M=$(PWD) modules 7 | clean: 8 | make -C $(KDIR) M=$(PWD) clean 9 | -------------------------------------------------------------------------------- /实验二/Makefile2: -------------------------------------------------------------------------------- 1 | obj-m := mypetree.o 2 | mypetree-objs := ptree.o 3 | KDIR := /lib/modules/$(shell uname -r)/build 4 | PWD := $(shell pwd) 5 | default: 6 | make -C $(KDIR) M=$(PWD) modules 7 | clean: 8 | make -C $(KDIR) M=$(PWD) clean 9 | -------------------------------------------------------------------------------- /实验二/allkt.c: -------------------------------------------------------------------------------- 1 | //按列对齐输出系统中所有内核线程的程序名、PID、进程状态、进程优先级、父进程的PID。 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | static int myallkt_init(void) 8 | { 9 | struct task_struct *p; 10 | p = NULL; 11 | printk(KERN_ALERT"myallkt begin\n%*s程序名%*s进程号%*s进程状态%*s进程优先级%*s父进程进程号\n",14," ",0," ",0," ",0," ",0," "); 12 | for_each_process(p) 13 | { 14 | if(p->mm == NULL) 15 | { 16 | printk(KERN_ALERT"%20s %6d %8ld %10d %12d\n",p->comm,p->pid,p->state,p->prio,p->parent->pid); 17 | } 18 | } 19 | printk(KERN_ALERT"\n"); 20 | return 0; 21 | } 22 | 23 | static void myallkt_exit(void) 24 | { 25 | printk(KERN_ALERT"myallkt end\n"); 26 | return ; 27 | } 28 | 29 | module_init(myallkt_init); 30 | module_exit(myallkt_exit); 31 | MODULE_LICENSE("GPL"); 32 | -------------------------------------------------------------------------------- /实验二/pstree.c: -------------------------------------------------------------------------------- 1 | //设计一个带参数的模块,其参数为某个进程的PID号,模块的功能是类似pstree的输出该进程的家族信息,包括父进程、兄弟进程和子进程的程序名、PID号及进程状态。 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | //#include 9 | //#include 10 | 11 | static pid_t pid = 1709; 12 | module_param(pid, int ,0644); 13 | 14 | void show_it_children(struct task_struct *p,char fout1[100],int fl,int nps) 15 | { 16 | struct task_struct *pchildren[500]; 17 | struct list_head *L; 18 | int i = 0,npc = 0,ml = 0; 19 | char out[100]; 20 | char fout2[100]; 21 | 22 | list_for_each(L,&p->children){ 23 | pchildren[npc++]=list_entry(L,struct task_struct,sibling); 24 | } 25 | 26 | //输出当前进程信息 27 | sprintf(out,"─%s(pid:%d,state:%ld)",p->comm,p->pid,p->state); 28 | ml = strlen(out) - 1; 29 | if(npc) 30 | { 31 | if(npc != 1) 32 | sprintf(fout2,"%s%s─┬─",fout1,out); 33 | else 34 | sprintf(fout2,"%s%s───",fout1,out); 35 | } 36 | else 37 | { 38 | printk("%s%s\n",fout1,out); 39 | return ; 40 | } 41 | //输出子进程信息 42 | if(nps - 1 > 0) 43 | sprintf(fout1,"%*s│%*s",fl,"",ml,""); 44 | else 45 | sprintf(fout1,"%*s",fl + ml + 2,""); 46 | for(i = 0;i < npc;i++) 47 | { 48 | sprintf(out,"%s(pid:%d,state:%ld)",pchildren[i]->comm,pchildren[i]->pid,pchildren[i]->state); 49 | if(i) 50 | { 51 | if(i != npc - 1) 52 | printk("%s├─%s\n",fout1,out); 53 | else 54 | printk("%s└─%s\n",fout1,out); 55 | } 56 | else 57 | { 58 | printk("%s%s\n",fout2,out); 59 | } 60 | } 61 | } 62 | 63 | static int mypetree_init(void) 64 | { 65 | struct task_struct *p; 66 | struct task_struct *psibling[100]; 67 | struct list_head *L; 68 | int i = 0,nps = 0,fl = 0,tps = 0; 69 | char out[100]; 70 | char fout1[100]; 71 | 72 | p=pid_task(find_vpid(pid),PIDTYPE_PID); 73 | 74 | list_for_each(L,&p->parent->children){ 75 | psibling[nps++]=list_entry(L,struct task_struct,sibling); 76 | } 77 | 78 | //输出父进程信息 79 | if(p->parent==NULL) 80 | sprintf(out,"无父进程─"); 81 | else 82 | sprintf(out,"%s(pid:%d,state:%ld)─",p->parent->comm,p->parent->pid,p->parent->state); 83 | fl = strlen(out) - 2; 84 | if(nps) 85 | sprintf(fout1,"%s┬",out); 86 | else 87 | sprintf(fout1,"%s─",out); 88 | 89 | show_it_children(p,fout1,fl,nps); 90 | 91 | tps = nps - 1; 92 | //输出兄弟进程信息 93 | for(i = 0;i < nps;i++) 94 | { 95 | if(psibling[i] != p) 96 | { 97 | --tps; 98 | if(tps) 99 | sprintf(out,"%*s├─",fl,""); 100 | else 101 | sprintf(out,"%*s└─",fl,""); 102 | show_it_children(psibling[i],out,fl,tps); 103 | } 104 | } 105 | return 0; 106 | } 107 | 108 | static void mypetree_exit(void) 109 | { 110 | printk(KERN_ALERT"mypetree end\n"); 111 | return ; 112 | } 113 | 114 | module_init(mypetree_init); 115 | module_exit(mypetree_exit); 116 | MODULE_LICENSE("GPL"); 117 | -------------------------------------------------------------------------------- /实验五/FileSystem/.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /实验五/FileSystem/.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | [Aa][Rr][Mm]/ 24 | [Aa][Rr][Mm]64/ 25 | bld/ 26 | [Bb]in/ 27 | [Oo]bj/ 28 | [Ll]og/ 29 | 30 | # Visual Studio 2015/2017 cache/options directory 31 | .vs/ 32 | # Uncomment if you have tasks that create the project's static files in wwwroot 33 | #wwwroot/ 34 | 35 | # Visual Studio 2017 auto generated files 36 | Generated\ Files/ 37 | 38 | # MSTest test Results 39 | [Tt]est[Rr]esult*/ 40 | [Bb]uild[Ll]og.* 41 | 42 | # NUNIT 43 | *.VisualState.xml 44 | TestResult.xml 45 | 46 | # Build Results of an ATL Project 47 | [Dd]ebugPS/ 48 | [Rr]eleasePS/ 49 | dlldata.c 50 | 51 | # Benchmark Results 52 | BenchmarkDotNet.Artifacts/ 53 | 54 | # .NET Core 55 | project.lock.json 56 | project.fragment.lock.json 57 | artifacts/ 58 | 59 | # StyleCop 60 | StyleCopReport.xml 61 | 62 | # Files built by Visual Studio 63 | *_i.c 64 | *_p.c 65 | *_h.h 66 | *.ilk 67 | *.meta 68 | *.obj 69 | *.iobj 70 | *.pch 71 | *.pdb 72 | *.ipdb 73 | *.pgc 74 | *.pgd 75 | *.rsp 76 | *.sbr 77 | *.tlb 78 | *.tli 79 | *.tlh 80 | *.tmp 81 | *.tmp_proj 82 | *_wpftmp.csproj 83 | *.log 84 | *.vspscc 85 | *.vssscc 86 | .builds 87 | *.pidb 88 | *.svclog 89 | *.scc 90 | 91 | # Chutzpah Test files 92 | _Chutzpah* 93 | 94 | # Visual C++ cache files 95 | ipch/ 96 | *.aps 97 | *.ncb 98 | *.opendb 99 | *.opensdf 100 | *.sdf 101 | *.cachefile 102 | *.VC.db 103 | *.VC.VC.opendb 104 | 105 | # Visual Studio profiler 106 | *.psess 107 | *.vsp 108 | *.vspx 109 | *.sap 110 | 111 | # Visual Studio Trace Files 112 | *.e2e 113 | 114 | # TFS 2012 Local Workspace 115 | $tf/ 116 | 117 | # Guidance Automation Toolkit 118 | *.gpState 119 | 120 | # ReSharper is a .NET coding add-in 121 | _ReSharper*/ 122 | *.[Rr]e[Ss]harper 123 | *.DotSettings.user 124 | 125 | # JustCode is a .NET coding add-in 126 | .JustCode 127 | 128 | # TeamCity is a build add-in 129 | _TeamCity* 130 | 131 | # DotCover is a Code Coverage Tool 132 | *.dotCover 133 | 134 | # AxoCover is a Code Coverage Tool 135 | .axoCover/* 136 | !.axoCover/settings.json 137 | 138 | # Visual Studio code coverage results 139 | *.coverage 140 | *.coveragexml 141 | 142 | # NCrunch 143 | _NCrunch_* 144 | .*crunch*.local.xml 145 | nCrunchTemp_* 146 | 147 | # MightyMoose 148 | *.mm.* 149 | AutoTest.Net/ 150 | 151 | # Web workbench (sass) 152 | .sass-cache/ 153 | 154 | # Installshield output folder 155 | [Ee]xpress/ 156 | 157 | # DocProject is a documentation generator add-in 158 | DocProject/buildhelp/ 159 | DocProject/Help/*.HxT 160 | DocProject/Help/*.HxC 161 | DocProject/Help/*.hhc 162 | DocProject/Help/*.hhk 163 | DocProject/Help/*.hhp 164 | DocProject/Help/Html2 165 | DocProject/Help/html 166 | 167 | # Click-Once directory 168 | publish/ 169 | 170 | # Publish Web Output 171 | *.[Pp]ublish.xml 172 | *.azurePubxml 173 | # Note: Comment the next line if you want to checkin your web deploy settings, 174 | # but database connection strings (with potential passwords) will be unencrypted 175 | *.pubxml 176 | *.publishproj 177 | 178 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 179 | # checkin your Azure Web App publish settings, but sensitive information contained 180 | # in these scripts will be unencrypted 181 | PublishScripts/ 182 | 183 | # NuGet Packages 184 | *.nupkg 185 | # The packages folder can be ignored because of Package Restore 186 | **/[Pp]ackages/* 187 | # except build/, which is used as an MSBuild target. 188 | !**/[Pp]ackages/build/ 189 | # Uncomment if necessary however generally it will be regenerated when needed 190 | #!**/[Pp]ackages/repositories.config 191 | # NuGet v3's project.json files produces more ignorable files 192 | *.nuget.props 193 | *.nuget.targets 194 | 195 | # Microsoft Azure Build Output 196 | csx/ 197 | *.build.csdef 198 | 199 | # Microsoft Azure Emulator 200 | ecf/ 201 | rcf/ 202 | 203 | # Windows Store app package directories and files 204 | AppPackages/ 205 | BundleArtifacts/ 206 | Package.StoreAssociation.xml 207 | _pkginfo.txt 208 | *.appx 209 | 210 | # Visual Studio cache files 211 | # files ending in .cache can be ignored 212 | *.[Cc]ache 213 | # but keep track of directories ending in .cache 214 | !?*.[Cc]ache/ 215 | 216 | # Others 217 | ClientBin/ 218 | ~$* 219 | *~ 220 | *.dbmdl 221 | *.dbproj.schemaview 222 | *.jfm 223 | *.pfx 224 | *.publishsettings 225 | orleans.codegen.cs 226 | 227 | # Including strong name files can present a security risk 228 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 229 | #*.snk 230 | 231 | # Since there are multiple workflows, uncomment next line to ignore bower_components 232 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 233 | #bower_components/ 234 | 235 | # RIA/Silverlight projects 236 | Generated_Code/ 237 | 238 | # Backup & report files from converting an old project file 239 | # to a newer Visual Studio version. Backup files are not needed, 240 | # because we have git ;-) 241 | _UpgradeReport_Files/ 242 | Backup*/ 243 | UpgradeLog*.XML 244 | UpgradeLog*.htm 245 | ServiceFabricBackup/ 246 | *.rptproj.bak 247 | 248 | # SQL Server files 249 | *.mdf 250 | *.ldf 251 | *.ndf 252 | 253 | # Business Intelligence projects 254 | *.rdl.data 255 | *.bim.layout 256 | *.bim_*.settings 257 | *.rptproj.rsuser 258 | *- Backup*.rdl 259 | 260 | # Microsoft Fakes 261 | FakesAssemblies/ 262 | 263 | # GhostDoc plugin setting file 264 | *.GhostDoc.xml 265 | 266 | # Node.js Tools for Visual Studio 267 | .ntvs_analysis.dat 268 | node_modules/ 269 | 270 | # Visual Studio 6 build log 271 | *.plg 272 | 273 | # Visual Studio 6 workspace options file 274 | *.opt 275 | 276 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 277 | *.vbw 278 | 279 | # Visual Studio LightSwitch build output 280 | **/*.HTMLClient/GeneratedArtifacts 281 | **/*.DesktopClient/GeneratedArtifacts 282 | **/*.DesktopClient/ModelManifest.xml 283 | **/*.Server/GeneratedArtifacts 284 | **/*.Server/ModelManifest.xml 285 | _Pvt_Extensions 286 | 287 | # Paket dependency manager 288 | .paket/paket.exe 289 | paket-files/ 290 | 291 | # FAKE - F# Make 292 | .fake/ 293 | 294 | # JetBrains Rider 295 | .idea/ 296 | *.sln.iml 297 | 298 | # CodeRush personal settings 299 | .cr/personal 300 | 301 | # Python Tools for Visual Studio (PTVS) 302 | __pycache__/ 303 | *.pyc 304 | 305 | # Cake - Uncomment if you are using it 306 | # tools/** 307 | # !tools/packages.config 308 | 309 | # Tabs Studio 310 | *.tss 311 | 312 | # Telerik's JustMock configuration file 313 | *.jmconfig 314 | 315 | # BizTalk build output 316 | *.btp.cs 317 | *.btm.cs 318 | *.odx.cs 319 | *.xsd.cs 320 | 321 | # OpenCover UI analysis results 322 | OpenCover/ 323 | 324 | # Azure Stream Analytics local run output 325 | ASALocalRun/ 326 | 327 | # MSBuild Binary and Structured Log 328 | *.binlog 329 | 330 | # NVidia Nsight GPU debugger configuration file 331 | *.nvuser 332 | 333 | # MFractors (Xamarin productivity tool) working folder 334 | .mfractor/ 335 | 336 | # Local History for Visual Studio 337 | .localhistory/ 338 | 339 | # BeatPulse healthcheck temp database 340 | healthchecksdb -------------------------------------------------------------------------------- /实验五/FileSystem/FileSystem.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29519.87 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FileSystem", "FileSystem.vcxproj", "{540F4D15-637C-46FB-8007-9B47B283A4C2}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|x64 = Debug|x64 11 | Debug|x86 = Debug|x86 12 | Release|x64 = Release|x64 13 | Release|x86 = Release|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {540F4D15-637C-46FB-8007-9B47B283A4C2}.Debug|x64.ActiveCfg = Debug|x64 17 | {540F4D15-637C-46FB-8007-9B47B283A4C2}.Debug|x64.Build.0 = Debug|x64 18 | {540F4D15-637C-46FB-8007-9B47B283A4C2}.Debug|x86.ActiveCfg = Debug|Win32 19 | {540F4D15-637C-46FB-8007-9B47B283A4C2}.Debug|x86.Build.0 = Debug|Win32 20 | {540F4D15-637C-46FB-8007-9B47B283A4C2}.Release|x64.ActiveCfg = Release|x64 21 | {540F4D15-637C-46FB-8007-9B47B283A4C2}.Release|x64.Build.0 = Release|x64 22 | {540F4D15-637C-46FB-8007-9B47B283A4C2}.Release|x86.ActiveCfg = Release|Win32 23 | {540F4D15-637C-46FB-8007-9B47B283A4C2}.Release|x86.Build.0 = Release|Win32 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {0576131E-FF2C-4108-B1C3-7B15CDDD7FA0} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /实验五/FileSystem/FileSystem.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | 16.0 23 | {540F4D15-637C-46FB-8007-9B47B283A4C2} 24 | FileSystem 25 | 10.0 26 | 27 | 28 | 29 | Application 30 | true 31 | v142 32 | MultiByte 33 | 34 | 35 | Application 36 | false 37 | v142 38 | true 39 | MultiByte 40 | 41 | 42 | Application 43 | true 44 | v142 45 | MultiByte 46 | 47 | 48 | Application 49 | false 50 | v142 51 | true 52 | MultiByte 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | Level3 76 | Disabled 77 | true 78 | true 79 | 80 | 81 | Console 82 | 83 | 84 | 85 | 86 | Level3 87 | Disabled 88 | true 89 | true 90 | 91 | 92 | Console 93 | 94 | 95 | 96 | 97 | Level3 98 | MaxSpeed 99 | true 100 | true 101 | true 102 | true 103 | 104 | 105 | Console 106 | true 107 | true 108 | 109 | 110 | 111 | 112 | Level3 113 | MaxSpeed 114 | true 115 | true 116 | true 117 | true 118 | 119 | 120 | Console 121 | true 122 | true 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | -------------------------------------------------------------------------------- /实验五/FileSystem/FileSystem.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 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 | -------------------------------------------------------------------------------- /实验五/FileSystem/block.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plussone/HDU-operation-system-course-design-code/d0f1602dc5c3615d7a676a8d46d54e8bb93c7d16/实验五/FileSystem/block.c -------------------------------------------------------------------------------- /实验五/FileSystem/block.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plussone/HDU-operation-system-course-design-code/d0f1602dc5c3615d7a676a8d46d54e8bb93c7d16/实验五/FileSystem/block.h -------------------------------------------------------------------------------- /实验五/FileSystem/block.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plussone/HDU-operation-system-course-design-code/d0f1602dc5c3615d7a676a8d46d54e8bb93c7d16/实验五/FileSystem/block.txt -------------------------------------------------------------------------------- /实验五/FileSystem/file.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plussone/HDU-operation-system-course-design-code/d0f1602dc5c3615d7a676a8d46d54e8bb93c7d16/实验五/FileSystem/file.c -------------------------------------------------------------------------------- /实验五/FileSystem/file.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plussone/HDU-operation-system-course-design-code/d0f1602dc5c3615d7a676a8d46d54e8bb93c7d16/实验五/FileSystem/file.h -------------------------------------------------------------------------------- /实验五/FileSystem/index.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plussone/HDU-operation-system-course-design-code/d0f1602dc5c3615d7a676a8d46d54e8bb93c7d16/实验五/FileSystem/index.c -------------------------------------------------------------------------------- /实验五/FileSystem/index.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plussone/HDU-operation-system-course-design-code/d0f1602dc5c3615d7a676a8d46d54e8bb93c7d16/实验五/FileSystem/index.h -------------------------------------------------------------------------------- /实验五/FileSystem/index.txt: -------------------------------------------------------------------------------- 1 | 8 2 | 7 ~/22 3 | 6 ~/111/222/333 4 | 5 ~/111/222 5 | 4 ~/111 6 | 3 ~/333 7 | 2 ~/222 8 | 1 ~/11 9 | 0 ~ 10 | 438 filefolder gjy135136 1 0 1609341219 1609341219 1609341219 1 23 0 0 0 0 0 0 0 0 0 0 0 11 | 438 filefolder gjy135136 1 0 1609401228 1609401228 1609401228 2 0 0 0 0 0 0 0 0 0 0 0 0 12 | 438 filefolder gjy135136 1 0 1609401309 1609401309 1609401309 3 0 0 0 0 0 0 0 0 0 0 0 0 13 | 438 file gjy135136 1 478 1609862551 1609862551 1609862551 4 16 17 18 19 20 21 22 0 0 0 0 0 14 | 438 filefolder gjy135136 1 0 1609901140 1609901140 1609901140 5 0 0 0 0 0 0 0 0 0 0 0 0 15 | 438 filefolder gjy135136 1 0 1609901146 1609901146 1609901146 6 0 0 0 0 0 0 0 0 0 0 0 0 16 | 438 filefolder gjy135136 1 0 1609901151 1609901151 1609901151 7 0 0 0 0 0 0 0 0 0 0 0 0 17 | 438 file gjy135136 1 960 1609901381 1609901367 1609901272 8 9 10 11 12 13 14 15 24 25 26 0 0 18 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 51 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 53 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 54 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 56 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 68 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 69 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 70 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 73 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 74 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 76 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 78 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 79 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 86 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 87 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 88 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 89 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 91 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 92 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 94 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 96 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 99 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 102 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 106 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 107 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 108 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 109 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 110 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 111 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 112 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 113 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 114 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 115 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 116 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 117 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 118 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 119 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 120 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 121 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 122 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 123 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 124 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 125 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 126 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 130 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 131 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 132 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 133 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 135 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 137 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 138 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 140 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 141 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 142 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 143 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 144 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 145 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 146 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 148 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 149 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 150 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 151 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 152 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 153 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 154 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 156 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 157 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 158 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 159 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 160 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 161 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 163 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 164 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 165 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 166 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 167 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 168 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 169 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 171 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 172 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 173 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 174 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 175 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 176 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 177 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 178 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 179 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 180 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 181 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 182 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 183 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 184 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 185 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 186 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 187 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 188 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 189 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 190 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 191 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 192 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 194 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 195 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 196 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 197 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 198 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 199 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 201 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 202 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 203 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 204 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 205 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 206 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 207 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 208 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 209 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 210 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 211 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 212 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 213 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 214 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 215 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 216 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 217 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 218 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 219 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 220 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 221 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 222 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 223 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 224 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 225 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 226 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 227 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 228 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 229 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 230 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 231 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 232 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 233 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 234 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 235 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 236 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 237 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 238 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 239 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 240 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 241 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 243 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 244 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 245 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 247 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 248 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 249 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 250 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 251 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 252 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 253 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 254 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 256 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 257 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 258 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 259 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 260 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 261 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 262 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 263 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 264 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 265 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 266 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 267 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 268 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 269 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 270 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 271 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 272 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 273 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 274 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 275 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 276 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 277 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 280 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 281 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 282 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 283 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 284 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 285 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 286 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 287 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 288 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 289 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 290 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 291 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 292 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 293 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 294 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 295 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 296 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 297 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 298 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 299 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 300 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 301 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 302 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 303 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 304 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 305 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 306 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 307 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 308 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 309 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 310 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 311 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 312 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 313 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 314 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 315 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 316 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 317 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 318 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 319 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 320 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 321 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 322 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 323 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 324 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 325 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 326 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 327 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 328 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 330 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 331 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 332 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 334 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 335 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 336 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 337 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 338 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 339 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 340 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 341 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 342 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 343 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 344 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 345 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 346 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 347 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 348 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 349 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 351 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 352 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 353 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 354 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 355 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 356 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 357 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 358 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 359 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 360 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 361 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 362 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 363 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 364 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 365 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 366 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 367 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 368 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 369 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 370 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 371 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 372 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 373 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 374 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 375 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 376 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 377 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 378 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 379 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 380 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 381 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 382 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 383 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 384 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 385 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 386 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 387 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 388 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 389 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 390 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 391 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 392 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 393 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 394 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 395 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 396 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 397 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 398 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 399 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 400 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 401 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 402 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 403 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 404 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 405 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 406 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 407 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 409 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 410 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 411 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 412 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 413 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 414 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 415 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 416 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 417 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 418 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 419 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 420 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 421 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 422 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 423 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 424 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 425 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 426 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 427 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 428 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 429 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 430 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 431 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 432 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 433 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 434 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 436 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 437 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 438 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 439 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 440 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 441 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 442 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 443 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 445 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 446 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 447 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 448 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 449 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 450 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 451 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 452 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 453 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 454 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 455 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 456 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 457 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 458 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 459 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 460 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 461 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 462 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 463 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 464 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 465 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 466 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 467 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 468 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 469 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 470 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 471 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 472 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 473 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 474 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 475 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 476 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 477 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 478 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 479 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 480 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 481 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 482 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 483 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 484 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 485 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 486 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 487 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 488 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 489 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 490 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 491 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 492 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 493 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 494 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 495 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 496 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 497 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 499 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 501 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 502 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 503 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 504 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 505 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 506 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 507 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 508 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 509 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 510 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 511 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 513 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 514 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 515 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 516 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 517 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 518 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 519 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 520 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 521 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 522 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 523 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 524 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 526 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 527 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 528 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 529 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 530 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 531 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 532 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 533 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 534 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 535 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 536 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 537 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 538 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 539 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 540 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 541 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 542 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 543 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 544 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 545 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 546 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 547 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 548 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 549 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 550 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 551 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 552 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 553 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 554 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 555 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 557 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 558 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 559 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 560 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 561 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 562 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 563 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 564 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 565 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 566 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 567 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 568 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 569 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 570 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 571 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 572 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 573 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 574 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 575 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 576 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 577 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 578 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 579 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 581 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 582 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 583 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 584 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 585 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 586 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 587 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 588 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 589 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 590 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 591 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 592 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 593 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 594 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 595 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 596 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 597 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 598 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 599 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 601 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 603 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 604 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 605 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 606 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 607 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 608 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 609 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 610 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 612 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 613 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 614 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 615 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 616 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 617 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 618 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 619 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 620 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 621 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 622 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 623 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 624 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 626 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 628 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 629 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 630 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 631 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 632 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 633 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 634 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 635 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 636 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 637 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 638 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 639 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 640 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 641 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 642 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 643 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 644 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 645 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 646 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 647 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 648 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 649 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 650 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 651 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 652 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 653 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 654 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 655 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 656 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 657 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 658 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 659 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 660 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 661 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 662 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 663 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 664 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 665 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 668 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 669 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 670 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 671 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 672 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 673 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 674 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 676 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 677 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 678 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 679 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 680 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 681 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 682 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 683 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 684 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 685 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 686 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 687 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 688 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 689 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 690 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 692 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 693 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 694 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 695 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 696 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 697 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 698 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 699 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 700 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 701 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 702 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 703 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 704 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 705 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 706 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 707 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 708 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 709 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 710 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 711 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 712 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 713 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 714 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 715 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 716 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 717 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 718 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 719 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 720 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 723 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 724 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 725 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 726 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 727 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 728 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 729 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 730 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 731 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 732 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 733 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 734 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 735 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 736 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 737 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 738 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 739 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 740 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 741 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 742 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 743 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 744 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 745 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 746 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 747 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 748 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 749 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 750 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 751 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 752 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 753 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 754 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 755 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 756 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 757 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 758 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 759 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 760 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 761 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 762 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 763 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 764 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 765 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 766 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 767 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 768 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 769 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 770 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 771 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 772 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 773 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 774 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 775 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 776 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 777 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 778 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 779 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 780 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 781 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 782 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 783 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 784 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 785 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 786 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 787 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 788 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 789 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 790 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 791 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 792 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 793 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 794 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 795 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 796 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 797 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 798 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 799 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 800 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 801 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 802 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 803 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 804 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 805 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 806 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 807 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 808 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 809 | -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 810 | -------------------------------------------------------------------------------- /实验五/FileSystem/shell.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plussone/HDU-operation-system-course-design-code/d0f1602dc5c3615d7a676a8d46d54e8bb93c7d16/实验五/FileSystem/shell.c --------------------------------------------------------------------------------