Given the following C code and unoptimized assembly code, your task is to generate highly optimized x86-64 assembly code.
C Code:

```c
// AOJ 0172: Doctor's Research Rooms
// 2018.1.24 bal4u@uu

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct { char rm; int light; } Q;
Q q[491520]; int top, end;
Q *used[15][32768];

int rm[15][15], s_rm[15];
int sw[15][15], s_sw[15];

char *msg[7] = {0,
"You can go home in %d steps.\n",
"You can not switch off all lights.",
"Help me!",
"Move to room %d.\n",
"Switch on room %d.\n",
"Switch off room %d.\n" };

typedef struct { char msg, rm; } T;
T res[30000]; int sz;

//#define getchar_unlocked()  getchar()
int in()
{
	int n = 0;
	int c = getchar_unlocked();
while (c < '0') c = getchar_unlocked();
	do n = (n<<3)+(n<<1) + (c & 0xf), c = getchar_unlocked();
	while (c >= '0');
	return n;
}

int cmp(int *a, int *b) { return *a - *b; }

int main()
{
	int n, m, i, j, s, t, ans;
	int room, light;

	while (n = in()) {
		m = in();
		memset(s_rm, 0, sizeof(s_rm));
		memset(s_sw, 0, sizeof(s_sw));

		for (i = 0; i < m; i++){
			s = in()-1, t = in()-1;
			rm[s][s_rm[s]++] = t;
			rm[t][s_rm[t]++] = s;
		}

		light = 0; for (i = 0; i < n; i++) if (in()) light |= 1 << i;

		for (i = 0; i < n; i++) {
			j = in(); while (j--) sw[i][s_sw[i]++] = in()-1;
			qsort(sw[i], s_sw[i], sizeof(int), cmp);
        }

		memset(used, 0, sizeof(used));
		q[0].rm = 0, q[0].light = light; top = 0, end = 1;
		used[0][light] = q;

		ans = 3;
		while (top < end) {
			s = q[top].rm, t = q[top].light;

			if (s == n-1) {
				if (t == 1<<(n-1)) { ans = 1; break; }
				ans = 2;
			}

			for (i = 0; i < s_sw[s]; i++) if (sw[s][i] != s) {
//			for (i = 0; i < s_sw[s]; i++) {
				light = t ^ (1<<sw[s][i]);
				if (used[s][light] == 0) {
					used[s][light] = q + top;
					q[end].rm = s, q[end++].light = light;
				}
			}

			for (i = 0; i < s_rm[s]; i++) {
				room = rm[s][i];
				if (t & (1<<room)) {
					if (used[room][t] == 0) {
						used[room][t] = q + top;
						q[end].rm = room, q[end++].light = t;
					}
				}
			}

			top++;
		}
 
		if (ans > 1) puts(msg[ans]);
		else {
			Q p = q[top];
			sz = 0;
			while (1) {
				Q nxt = *used[p.rm][p.light];
				if (nxt.rm == p.rm && nxt.light == p.light) break;
				if (p.rm != nxt.rm) res[sz].msg = 4, res[sz++].rm = p.rm;
				else for (i = 0; i < n; i++) if ((p.light & (1<<i)) ^ (nxt.light & (1<<i))) {
					if (p.light & (1<<i)) res[sz].msg = 5; else res[sz].msg = 6;
					res[sz++].rm = i;
					break;
				}
				p = nxt;
			}
			printf(msg[ans], sz);
			while (sz--) printf(msg[res[sz].msg], 1 + res[sz].rm);
		}
    }
    return 0;
}
```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.globl	q
	.bss
	.align 32
	.type	q, @object
	.size	q, 3932160
q:
	.zero	3932160
	.globl	top
	.align 4
	.type	top, @object
	.size	top, 4
top:
	.zero	4
	.globl	end
	.align 4
	.type	end, @object
	.size	end, 4
end:
	.zero	4
	.globl	used
	.align 32
	.type	used, @object
	.size	used, 3932160
used:
	.zero	3932160
	.globl	rm
	.align 32
	.type	rm, @object
	.size	rm, 900
rm:
	.zero	900
	.globl	s_rm
	.align 32
	.type	s_rm, @object
	.size	s_rm, 60
s_rm:
	.zero	60
	.globl	sw
	.align 32
	.type	sw, @object
	.size	sw, 900
sw:
	.zero	900
	.globl	s_sw
	.align 32
	.type	s_sw, @object
	.size	s_sw, 60
s_sw:
	.zero	60
	.globl	msg
	.section	.rodata
.LC0:
	.string	"You can go home in %d steps.\n"
	.align 8
.LC1:
	.string	"You can not switch off all lights."
.LC2:
	.string	"Help me!"
.LC3:
	.string	"Move to room %d.\n"
.LC4:
	.string	"Switch on room %d.\n"
.LC5:
	.string	"Switch off room %d.\n"
	.section	.data.rel.local,"aw"
	.align 32
	.type	msg, @object
	.size	msg, 56
msg:
	.quad	0
	.quad	.LC0
	.quad	.LC1
	.quad	.LC2
	.quad	.LC3
	.quad	.LC4
	.quad	.LC5
	.globl	res
	.bss
	.align 32
	.type	res, @object
	.size	res, 60000
res:
	.zero	60000
	.globl	sz
	.align 4
	.type	sz, @object
	.size	sz, 4
sz:
	.zero	4
	.text
	.globl	in
	.type	in, @function
in:
.LFB6:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	$0, -8(%rbp)
	call	getchar_unlocked@PLT
	movl	%eax, -4(%rbp)
	jmp	.L2
.L3:
	call	getchar_unlocked@PLT
	movl	%eax, -4(%rbp)
.L2:
	cmpl	$47, -4(%rbp)
	jle	.L3
.L4:
	movl	-8(%rbp), %eax
	leal	0(,%rax,8), %edx
	movl	-8(%rbp), %eax
	addl	%eax, %eax
	addl	%eax, %edx
	movl	-4(%rbp), %eax
	andl	$15, %eax
	addl	%edx, %eax
	movl	%eax, -8(%rbp)
	call	getchar_unlocked@PLT
	movl	%eax, -4(%rbp)
	cmpl	$47, -4(%rbp)
	jg	.L4
	movl	-8(%rbp), %eax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	in, .-in
	.globl	cmp
	.type	cmp, @function
cmp:
.LFB7:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movl	(%rax), %edx
	movq	-16(%rbp), %rax
	movl	(%rax), %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	cmp, .-cmp
	.globl	main
	.type	main, @function
main:
.LFB8:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$64, %rsp
	jmp	.L9
.L42:
	movl	$0, %eax
	call	in
	movl	%eax, -32(%rbp)
	movl	$60, %edx
	movl	$0, %esi
	leaq	s_rm(%rip), %rax
	movq	%rax, %rdi
	call	memset@PLT
	movl	$60, %edx
	movl	$0, %esi
	leaq	s_sw(%rip), %rax
	movq	%rax, %rdi
	call	memset@PLT
	movl	$0, -52(%rbp)
	jmp	.L10
.L11:
	movl	$0, %eax
	call	in
	subl	$1, %eax
	movl	%eax, -28(%rbp)
	movl	$0, %eax
	call	in
	subl	$1, %eax
	movl	%eax, -24(%rbp)
	movl	-28(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	leal	1(%rax), %edx
	movl	-28(%rbp), %ecx
	movslq	%ecx, %rcx
	leaq	0(,%rcx,4), %rsi
	leaq	s_rm(%rip), %rcx
	movl	%edx, (%rsi,%rcx)
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rcx
	leaq	rm(%rip), %rdx
	movl	-24(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
	movl	-24(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	leal	1(%rax), %edx
	movl	-24(%rbp), %ecx
	movslq	%ecx, %rcx
	leaq	0(,%rcx,4), %rsi
	leaq	s_rm(%rip), %rcx
	movl	%edx, (%rsi,%rcx)
	movslq	%eax, %rcx
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rcx
	leaq	rm(%rip), %rdx
	movl	-28(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
	addl	$1, -52(%rbp)
.L10:
	movl	-52(%rbp), %eax
	cmpl	-32(%rbp), %eax
	jl	.L11
	movl	$0, -40(%rbp)
	movl	$0, -52(%rbp)
	jmp	.L12
.L14:
	movl	$0, %eax
	call	in
	testl	%eax, %eax
	je	.L13
	movl	-52(%rbp), %eax
	movl	$1, %edx
	movl	%eax, %ecx
	sall	%cl, %edx
	movl	%edx, %eax
	orl	%eax, -40(%rbp)
.L13:
	addl	$1, -52(%rbp)
.L12:
	movl	-52(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jl	.L14
	movl	$0, -52(%rbp)
	jmp	.L15
.L18:
	movl	$0, %eax
	call	in
	movl	%eax, -48(%rbp)
	jmp	.L16
.L17:
	movl	$0, %eax
	call	in
	movl	%eax, %edx
	movl	-52(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rcx
	leaq	s_sw(%rip), %rax
	movl	(%rcx,%rax), %eax
	leal	1(%rax), %ecx
	movl	-52(%rbp), %esi
	movslq	%esi, %rsi
	leaq	0(,%rsi,4), %rdi
	leaq	s_sw(%rip), %rsi
	movl	%ecx, (%rdi,%rsi)
	leal	-1(%rdx), %ecx
	movslq	%eax, %rsi
	movl	-52(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rsi, %rax
	leaq	0(,%rax,4), %rdx
	leaq	sw(%rip), %rax
	movl	%ecx, (%rdx,%rax)
.L16:
	movl	-48(%rbp), %eax
	leal	-1(%rax), %edx
	movl	%edx, -48(%rbp)
	testl	%eax, %eax
	jne	.L17
	movl	-52(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	movslq	%eax, %rsi
	movl	-52(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	salq	$2, %rax
	leaq	sw(%rip), %rdx
	addq	%rdx, %rax
	leaq	cmp(%rip), %rdx
	movq	%rdx, %rcx
	movl	$4, %edx
	movq	%rax, %rdi
	call	qsort@PLT
	addl	$1, -52(%rbp)
.L15:
	movl	-52(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jl	.L18
	movl	$3932160, %edx
	movl	$0, %esi
	leaq	used(%rip), %rax
	movq	%rax, %rdi
	call	memset@PLT
	movb	$0, q(%rip)
	movl	-40(%rbp), %eax
	movl	%eax, 4+q(%rip)
	movl	$0, top(%rip)
	movl	$1, end(%rip)
	movl	-40(%rbp), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	leaq	q(%rip), %rcx
	movq	%rcx, (%rdx,%rax)
	movl	$3, -44(%rbp)
	jmp	.L19
.L29:
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movzbl	(%rdx,%rax), %eax
	movsbl	%al, %eax
	movl	%eax, -28(%rbp)
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	4+q(%rip), %rax
	movl	(%rdx,%rax), %eax
	movl	%eax, -24(%rbp)
	movl	-36(%rbp), %eax
	subl	$1, %eax
	cmpl	%eax, -28(%rbp)
	jne	.L20
	movl	-36(%rbp), %eax
	subl	$1, %eax
	movl	$1, %edx
	movl	%eax, %ecx
	sall	%cl, %edx
	movl	%edx, %eax
	cmpl	%eax, -24(%rbp)
	jne	.L21
	movl	$1, -44(%rbp)
	jmp	.L22
.L21:
	movl	$2, -44(%rbp)
.L20:
	movl	$0, -52(%rbp)
	jmp	.L23
.L25:
	movl	-52(%rbp), %eax
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rdx
	leaq	sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	cmpl	%eax, -28(%rbp)
	je	.L24
	movl	-52(%rbp), %eax
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rdx
	leaq	sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	movl	$1, %edx
	movl	%eax, %ecx
	sall	%cl, %edx
	movl	%edx, %eax
	xorl	-24(%rbp), %eax
	movl	%eax, -40(%rbp)
	movl	-40(%rbp), %eax
	movslq	%eax, %rdx
	movl	-28(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	(%rdx,%rax), %rax
	testq	%rax, %rax
	jne	.L24
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	leaq	(%rdx,%rax), %rcx
	movl	-40(%rbp), %eax
	movslq	%eax, %rdx
	movl	-28(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	%rcx, (%rdx,%rax)
	movl	end(%rip), %eax
	movl	-28(%rbp), %edx
	movl	%edx, %ecx
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movb	%cl, (%rdx,%rax)
	movl	end(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, end(%rip)
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	4+q(%rip), %rdx
	movl	-40(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
.L24:
	addl	$1, -52(%rbp)
.L23:
	movl	-28(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	cmpl	%eax, -52(%rbp)
	jl	.L25
	movl	$0, -52(%rbp)
	jmp	.L26
.L28:
	movl	-52(%rbp), %eax
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rdx
	leaq	rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	movl	%eax, -20(%rbp)
	movl	-20(%rbp), %eax
	movl	-24(%rbp), %edx
	movl	%eax, %ecx
	sarl	%cl, %edx
	movl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L27
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movl	-20(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	(%rdx,%rax), %rax
	testq	%rax, %rax
	jne	.L27
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	leaq	(%rdx,%rax), %rcx
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movl	-20(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	%rcx, (%rdx,%rax)
	movl	end(%rip), %eax
	movl	-20(%rbp), %edx
	movl	%edx, %ecx
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movb	%cl, (%rdx,%rax)
	movl	end(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, end(%rip)
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	4+q(%rip), %rdx
	movl	-24(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
.L27:
	addl	$1, -52(%rbp)
.L26:
	movl	-28(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	cmpl	%eax, -52(%rbp)
	jl	.L28
	movl	top(%rip), %eax
	addl	$1, %eax
	movl	%eax, top(%rip)
.L19:
	movl	top(%rip), %edx
	movl	end(%rip), %eax
	cmpl	%eax, %edx
	jl	.L29
.L22:
	cmpl	$1, -44(%rbp)
	jle	.L30
	movl	-44(%rbp), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	msg(%rip), %rax
	movq	(%rdx,%rax), %rax
	movq	%rax, %rdi
	call	puts@PLT
	jmp	.L9
.L30:
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movq	(%rdx,%rax), %rax
	movq	%rax, -16(%rbp)
	movl	$0, sz(%rip)
.L40:
	movzbl	-16(%rbp), %eax
	movsbl	%al, %eax
	movl	-12(%rbp), %edx
	movslq	%edx, %rdx
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	(%rdx,%rax), %rax
	movq	(%rax), %rax
	movq	%rax, -8(%rbp)
	movzbl	-8(%rbp), %edx
	movzbl	-16(%rbp), %eax
	cmpb	%al, %dl
	jne	.L31
	movl	-4(%rbp), %edx
	movl	-12(%rbp), %eax
	cmpl	%eax, %edx
	jne	.L31
	movl	sz(%rip), %edx
	movl	-44(%rbp), %eax
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	msg(%rip), %rax
	movq	(%rcx,%rax), %rax
	movl	%edx, %esi
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	jmp	.L32
.L31:
	movzbl	-16(%rbp), %edx
	movzbl	-8(%rbp), %eax
	cmpb	%al, %dl
	je	.L33
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	res(%rip), %rax
	movb	$4, (%rdx,%rax)
	movl	sz(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, sz(%rip)
	movzbl	-16(%rbp), %edx
	cltq
	leaq	(%rax,%rax), %rcx
	leaq	1+res(%rip), %rax
	movb	%dl, (%rcx,%rax)
	jmp	.L34
.L33:
	movl	$0, -52(%rbp)
	jmp	.L35
.L39:
	movl	-12(%rbp), %edx
	movl	-4(%rbp), %eax
	xorl	%eax, %edx
	movl	-52(%rbp), %eax
	movl	%eax, %ecx
	sarl	%cl, %edx
	movl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L36
	movl	-12(%rbp), %edx
	movl	-52(%rbp), %eax
	movl	%eax, %ecx
	sarl	%cl, %edx
	movl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L37
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	res(%rip), %rax
	movb	$5, (%rdx,%rax)
	jmp	.L38
.L37:
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	res(%rip), %rax
	movb	$6, (%rdx,%rax)
.L38:
	movl	sz(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, sz(%rip)
	movl	-52(%rbp), %edx
	movl	%edx, %ecx
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	1+res(%rip), %rax
	movb	%cl, (%rdx,%rax)
	jmp	.L34
.L36:
	addl	$1, -52(%rbp)
.L35:
	movl	-52(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jl	.L39
.L34:
	movq	-8(%rbp), %rax
	movq	%rax, -16(%rbp)
	jmp	.L40
.L41:
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	1+res(%rip), %rax
	movzbl	(%rdx,%rax), %eax
	movsbl	%al, %eax
	leal	1(%rax), %edx
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rcx
	leaq	res(%rip), %rax
	movzbl	(%rcx,%rax), %eax
	movsbl	%al, %eax
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	msg(%rip), %rax
	movq	(%rcx,%rax), %rax
	movl	%edx, %esi
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L32:
	movl	sz(%rip), %eax
	leal	-1(%rax), %edx
	movl	%edx, sz(%rip)
	testl	%eax, %eax
	jne	.L41
.L9:
	movl	$0, %eax
	call	in
	movl	%eax, -36(%rbp)
	cmpl	$0, -36(%rbp)
	jne	.L42
	movl	$0, %eax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
```

Only output the optimized assembly code. Do not include any other text. Do not write any comments in the assembly code. Wrap the assembly code in ```assembly``` tags.
user
	.file	"temp.c"
	.text
	.p2align 4
	.globl	cmp
	.type	cmp, @function
cmp:
.LFB52:
	.cfi_startproc
	endbr64
	movl	(%rdi), %eax
	subl	(%rsi), %eax
	ret
	.cfi_endproc
.LFE52:
	.size	cmp, .-cmp
	.p2align 4
	.globl	in
	.type	in, @function
in:
.LFB51:
	.cfi_startproc
	endbr64
	movq	stdin(%rip), %rdi
	pushq	%r12
	.cfi_def_cfa_offset 16
	.cfi_offset 12, -16
	movq	8(%rdi), %rax
	movq	16(%rdi), %rsi
	cmpq	%rsi, %rax
	jnb	.L17
	leaq	1(%rax), %rcx
	movq	%rcx, 8(%rdi)
	movzbl	(%rax), %eax
.L7:
	movq	%rcx, %rdx
	cmpl	$47, %eax
	jle	.L5
	jmp	.L6
	.p2align 4,,10
	.p2align 3
.L8:
	leaq	1(%rcx), %rdx
	movq	%rdx, 8(%rdi)
	movzbl	(%rcx), %eax
	cmpl	$47, %eax
	jg	.L6
.L9:
	movq	%rdx, %rcx
.L5:
	cmpq	%rsi, %rcx
	jb	.L8
	call	__uflow@PLT
	movq	stdin(%rip), %rdi
	movq	8(%rdi), %rdx
	movq	16(%rdi), %rsi
	cmpl	$47, %eax
	jle	.L9
	.p2align 4,,10
	.p2align 3
.L6:
	xorl	%r12d, %r12d
	jmp	.L13
	.p2align 4,,10
	.p2align 3
.L10:
	leaq	1(%rdx), %rax
	movq	%rax, 8(%rdi)
	movzbl	(%rdx), %eax
	cmpl	$47, %eax
	jle	.L3
.L11:
	movq	8(%rdi), %rdx
	movq	16(%rdi), %rsi
.L13:
	leal	(%r12,%r12,4), %ecx
	andl	$15, %eax
	leal	(%rax,%rcx,2), %r12d
	cmpq	%rsi, %rdx
	jb	.L10
	call	__uflow@PLT
	cmpl	$47, %eax
	jle	.L3
	movq	stdin(%rip), %rdi
	jmp	.L11
	.p2align 4,,10
	.p2align 3
.L3:
	movl	%r12d, %eax
	popq	%r12
	.cfi_remember_state
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L17:
	.cfi_restore_state
	call	__uflow@PLT
	movq	stdin(%rip), %rdi
	movq	8(%rdi), %rcx
	movq	16(%rdi), %rsi
	jmp	.L7
	.cfi_endproc
.LFE51:
	.size	in, .-in
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB53:
	.cfi_startproc
	endbr64
	pushq	%r15
	.cfi_def_cfa_offset 16
	.cfi_offset 15, -16
	pushq	%r14
	.cfi_def_cfa_offset 24
	.cfi_offset 14, -24
	pushq	%r13
	.cfi_def_cfa_offset 32
	.cfi_offset 13, -32
	pushq	%r12
	.cfi_def_cfa_offset 40
	.cfi_offset 12, -40
	pushq	%rbp
	.cfi_def_cfa_offset 48
	.cfi_offset 6, -48
	pushq	%rbx
	.cfi_def_cfa_offset 56
	.cfi_offset 3, -56
	subq	$40, %rsp
	.cfi_def_cfa_offset 96
.L19:
	xorl	%eax, %eax
	call	in
	movl	%eax, 28(%rsp)
	testl	%eax, %eax
	je	.L148
.L49:
	xorl	%eax, %eax
	xorl	%r12d, %r12d
	leaq	rm(%rip), %r13
	call	in
	pxor	%xmm0, %xmm0
	movq	$0, 48+s_rm(%rip)
	movl	$0, 56+s_rm(%rip)
	movl	%eax, %ebx
	movq	$0, 48+s_sw(%rip)
	movl	$0, 56+s_sw(%rip)
	movaps	%xmm0, s_rm(%rip)
	movaps	%xmm0, 16+s_rm(%rip)
	movaps	%xmm0, 32+s_rm(%rip)
	movaps	%xmm0, s_sw(%rip)
	movaps	%xmm0, 16+s_sw(%rip)
	movaps	%xmm0, 32+s_sw(%rip)
	testl	%eax, %eax
	jle	.L23
	.p2align 4,,10
	.p2align 3
.L20:
	xorl	%eax, %eax
	addl	$1, %r12d
	call	in
	leal	-1(%rax), %ebp
	xorl	%eax, %eax
	call	in
	movslq	%ebp, %rsi
	leaq	s_rm(%rip), %rdi
	movl	(%rdi,%rsi,4), %edx
	subl	$1, %eax
	leal	1(%rdx), %ecx
	movl	%ecx, (%rdi,%rsi,4)
	movslq	%edx, %rcx
	movq	%rsi, %rdx
	salq	$4, %rdx
	subq	%rsi, %rdx
	addq	%rcx, %rdx
	movl	%eax, 0(%r13,%rdx,4)
	cltq
	movl	(%rdi,%rax,4), %edx
	leal	1(%rdx), %ecx
	movl	%ecx, (%rdi,%rax,4)
	movslq	%edx, %rcx
	movq	%rax, %rdx
	salq	$4, %rdx
	subq	%rax, %rdx
	leaq	(%rdx,%rcx), %rax
	movl	%ebp, 0(%r13,%rax,4)
	cmpl	%r12d, %ebx
	jne	.L20
.L23:
	movl	28(%rsp), %eax
	movl	28(%rsp), %r12d
	xorl	%r14d, %r14d
	xorl	%ebp, %ebp
	movl	$0, 20(%rsp)
	movl	$1, %ebx
	testl	%eax, %eax
	jg	.L21
	jmp	.L22
	.p2align 4,,10
	.p2align 3
.L56:
	movl	%eax, %r14d
.L21:
	xorl	%eax, %eax
	call	in
	movl	%ebx, %edi
	movl	%r14d, %ecx
	movl	%ebp, %edx
	sall	%cl, %edi
	orl	%edi, %ebp
	testl	%eax, %eax
	leal	1(%r14), %eax
	cmove	%edx, %ebp
	cmpl	%eax, %r12d
	jne	.L56
	xorl	%eax, %eax
	movl	%ebp, 20(%rsp)
	leaq	sw(%rip), %r13
	xorl	%r15d, %r15d
	movl	%r14d, 12(%rsp)
	leaq	s_sw(%rip), %rbp
	movq	%r13, %r14
	call	in
	movl	%eax, %ebx
	testl	%eax, %eax
	je	.L25
	.p2align 4,,10
	.p2align 3
.L149:
	movslq	%r15d, %rax
	movq	%rax, %r12
	salq	$4, %r12
	subq	%rax, %r12
	.p2align 4,,10
	.p2align 3
.L26:
	xorl	%eax, %eax
	call	in
	movl	%eax, %r8d
	movslq	0(%rbp), %rax
	leal	-1(%r8), %edx
	leal	1(%rax), %esi
	addq	%r12, %rax
	movl	%esi, 0(%rbp)
	movl	%edx, 0(%r13,%rax,4)
	subl	$1, %ebx
	jne	.L26
.L27:
	movq	%r14, %rdi
	movslq	%esi, %rsi
	movl	$4, %edx
	addq	$60, %r14
	leaq	cmp(%rip), %rcx
	addq	$4, %rbp
	call	qsort@PLT
	leal	1(%r15), %eax
	cmpl	%r15d, 12(%rsp)
	je	.L22
	movl	%eax, %r15d
	xorl	%eax, %eax
	call	in
	movl	%eax, %ebx
	testl	%eax, %eax
	jne	.L149
.L25:
	movl	0(%rbp), %esi
	jmp	.L27
.L22:
	leaq	used(%rip), %rdi
	xorl	%esi, %esi
	xorl	%r14d, %r14d
	xorl	%r13d, %r13d
	movl	$3932160, %edx
	leaq	q(%rip), %r12
	call	memset@PLT
	movl	$1, %r10d
	movq	%r12, %rbx
	movb	$0, q(%rip)
	movl	$0, top(%rip)
	movq	%rax, %rdi
	movl	%r10d, %edx
	movslq	20(%rsp), %rax
	movl	$1, end(%rip)
	movl	%eax, 4+q(%rip)
	movq	%r12, (%rdi,%rax,8)
	movl	28(%rsp), %eax
	movl	$3, 20(%rsp)
	subl	$1, %eax
	movl	%eax, %esi
	movl	%eax, 12(%rsp)
	xorl	%eax, %eax
	movl	%esi, %ecx
	movl	4(%rbx), %esi
	sall	%cl, %edx
	movsbq	(%rbx), %rcx
	movl	%edx, 24(%rsp)
	movq	%rcx, %r9
	cmpl	12(%rsp), %ecx
	je	.L150
	.p2align 4,,10
	.p2align 3
.L29:
	movslq	%ecx, %r15
	leaq	s_sw(%rip), %rax
	movl	(%rax,%r15,4), %r8d
	testl	%r8d, %r8d
	jle	.L31
	movsbq	%r9b, %rax
	subl	$1, %r8d
	leaq	4+sw(%rip), %r11
	movq	%r15, %rbp
	movq	%rax, %rdx
	salq	$15, %rbp
	salq	$4, %rdx
	subq	%rax, %rdx
	leaq	sw(%rip), %rax
	leaq	(%rax,%rdx,4), %rax
	addq	%r8, %rdx
	leaq	(%r11,%rdx,4), %r11
	jmp	.L33
	.p2align 4,,10
	.p2align 3
.L32:
	addq	$4, %rax
	cmpq	%rax, %r11
	je	.L31
.L33:
	movl	(%rax), %edx
	cmpl	%ecx, %edx
	je	.L32
	movl	%esi, %r8d
	btcl	%edx, %r8d
	movslq	%r8d, %rdx
	addq	%rbp, %rdx
	cmpq	$0, (%rdi,%rdx,8)
	jne	.L32
	movq	%rbx, (%rdi,%rdx,8)
	addq	$4, %rax
	movslq	%r10d, %rdx
	movl	$1, %r14d
	movb	%r9b, (%r12,%rdx,8)
	addl	$1, %r10d
	movl	%r8d, 4(%r12,%rdx,8)
	cmpq	%rax, %r11
	jne	.L33
	.p2align 4,,10
	.p2align 3
.L31:
	leaq	s_rm(%rip), %rax
	movl	(%rax,%r15,4), %ecx
	testl	%ecx, %ecx
	jle	.L34
	movq	%r9, %rdx
	subl	$1, %ecx
	leaq	rm(%rip), %rax
	salq	$4, %rdx
	subq	%r9, %rdx
	movslq	%esi, %r9
	leaq	(%rax,%rdx,4), %rax
	addq	%rcx, %rdx
	leaq	4+rm(%rip), %rcx
	leaq	(%rcx,%rdx,4), %r8
	jmp	.L36
	.p2align 4,,10
	.p2align 3
.L35:
	addq	$4, %rax
	cmpq	%rax, %r8
	je	.L34
.L36:
	movl	(%rax), %ecx
	btl	%ecx, %esi
	jnc	.L35
	movslq	%ecx, %rdx
	salq	$15, %rdx
	addq	%r9, %rdx
	cmpq	$0, (%rdi,%rdx,8)
	jne	.L35
	movq	%rbx, (%rdi,%rdx,8)
	addq	$4, %rax
	movslq	%r10d, %rdx
	movl	$1, %r14d
	movb	%cl, (%r12,%rdx,8)
	addl	$1, %r10d
	movl	%esi, 4(%r12,%rdx,8)
	cmpq	%rax, %r8
	jne	.L36
	.p2align 4,,10
	.p2align 3
.L34:
	addl	$1, %r13d
	addq	$8, %rbx
	movl	$1, %eax
	cmpl	%r10d, %r13d
	jge	.L151
	movsbq	(%rbx), %rcx
	movl	4(%rbx), %esi
	movl	%r13d, 16(%rsp)
	movq	%rcx, %r9
	cmpl	12(%rsp), %ecx
	jne	.L29
.L150:
	cmpl	%esi, 24(%rsp)
	je	.L30
	movl	$2, 20(%rsp)
	jmp	.L29
.L151:
	movl	%r13d, top(%rip)
	testb	%r14b, %r14b
	je	.L50
	movl	%r10d, end(%rip)
.L50:
	movslq	20(%rsp), %rax
	leaq	msg(%rip), %rbx
	movq	(%rbx,%rax,8), %rdi
	call	puts@PLT
	xorl	%eax, %eax
	call	in
	movl	%eax, 28(%rsp)
	testl	%eax, %eax
	jne	.L49
.L148:
	addq	$40, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 56
	xorl	%eax, %eax
	popq	%rbx
	.cfi_def_cfa_offset 48
	popq	%rbp
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	ret
.L30:
	.cfi_restore_state
	testb	%al, %al
	je	.L51
	movl	16(%rsp), %eax
	movl	%eax, top(%rip)
.L51:
	testb	%r14b, %r14b
	je	.L52
	movl	%r10d, end(%rip)
.L52:
	movl	28(%rsp), %r15d
	xorl	%r10d, %r10d
	xorl	%edx, %edx
	movl	%ecx, %eax
	movl	$0, sz(%rip)
	leaq	res(%rip), %r8
	jmp	.L53
	.p2align 4,,10
	.p2align 3
.L39:
	movslq	%edx, %rcx
	movl	$1, %r10d
	addl	$1, %edx
	movb	$4, (%r8,%rcx,2)
	movb	%r9b, 1(%r8,%rcx,2)
.L41:
	movl	%eax, %esi
	movsbl	%r11b, %eax
	movl	%eax, %r9d
.L53:
	cltq
	movslq	%esi, %rcx
	salq	$15, %rax
	addq	%rcx, %rax
	movq	(%rdi,%rax,8), %rax
	movzbl	(%rax), %r11d
	movl	4(%rax), %eax
	cmpb	%r11b, %r9b
	jne	.L39
	cmpl	%eax, %esi
	je	.L40
	testl	%r15d, %r15d
	jle	.L41
	movl	%esi, %ecx
	xorl	%eax, %ecx
	testb	$1, %cl
	jne	.L152
	cmpl	$1, %r15d
	je	.L41
	testb	$2, %cl
	jne	.L60
	cmpl	$2, %r15d
	je	.L41
	testb	$4, %cl
	jne	.L61
	cmpl	$3, %r15d
	je	.L41
	testb	$8, %cl
	jne	.L62
	cmpl	$4, %r15d
	je	.L41
	testb	$16, %cl
	jne	.L63
	cmpl	$5, %r15d
	je	.L41
	testb	$32, %cl
	jne	.L64
	cmpl	$6, %r15d
	je	.L41
	testb	$64, %cl
	jne	.L65
	cmpl	$7, %r15d
	je	.L41
	testb	$-128, %cl
	jne	.L66
	cmpl	$8, %r15d
	je	.L41
	testb	$1, %ch
	jne	.L67
	cmpl	$9, %r15d
	je	.L41
	testb	$2, %ch
	jne	.L68
	cmpl	$10, %r15d
	je	.L41
	testb	$4, %ch
	jne	.L69
	cmpl	$11, %r15d
	je	.L41
	testb	$8, %ch
	jne	.L70
	cmpl	$12, %r15d
	je	.L41
	testb	$16, %ch
	jne	.L71
	cmpl	$13, %r15d
	je	.L41
	testb	$32, %ch
	jne	.L72
	cmpl	$14, %r15d
	je	.L41
	andb	$64, %ch
	jne	.L73
	movl	$15, %ecx
	cmpl	$15, %r15d
	je	.L41
.L44:
	sarl	%cl, %esi
.L42:
	andl	$1, %esi
	movl	$6, %r10d
	xorl	%r9d, %r9d
	movslq	%edx, %rbp
	subl	%esi, %r10d
	addl	$1, %edx
	movb	%r10b, %r9b
	movl	$1, %r10d
	movl	%r9d, %ebx
	movb	%cl, %bh
	movw	%bx, (%r8,%rbp,2)
	jmp	.L41
.L40:
	testb	%r10b, %r10b
	je	.L75
	movl	%edx, sz(%rip)
.L45:
	movq	8+msg(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	leaq	res(%rip), %rbp
	leaq	msg(%rip), %rbx
	call	__printf_chk@PLT
	movl	sz(%rip), %edx
	leal	-1(%rdx), %eax
	movl	%eax, sz(%rip)
	testl	%edx, %edx
	je	.L19
	.p2align 4,,10
	.p2align 3
.L46:
	cltq
	movl	$1, %edi
	movsbl	1(%rbp,%rax,2), %edx
	movsbq	0(%rbp,%rax,2), %rax
	movq	(%rbx,%rax,8), %rsi
	addl	$1, %edx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	sz(%rip), %edx
	leal	-1(%rdx), %eax
	movl	%eax, sz(%rip)
	testl	%edx, %edx
	jne	.L46
	jmp	.L19
.L152:
	xorl	%ecx, %ecx
	jmp	.L42
.L60:
	movl	$1, %ecx
	jmp	.L44
.L75:
	xorl	%edx, %edx
	jmp	.L45
.L61:
	movl	$2, %ecx
	jmp	.L44
.L62:
	movl	$3, %ecx
	jmp	.L44
.L63:
	movl	$4, %ecx
	jmp	.L44
.L64:
	movl	$5, %ecx
	jmp	.L44
.L65:
	movl	$6, %ecx
	jmp	.L44
.L66:
	movl	$7, %ecx
	jmp	.L44
.L67:
	movl	$8, %ecx
	jmp	.L44
.L68:
	movl	$9, %ecx
	jmp	.L44
.L69:
	movl	$10, %ecx
	jmp	.L44
.L70:
	movl	$11, %ecx
	jmp	.L44
.L71:
	movl	$12, %ecx
	jmp	.L44
.L72:
	movl	$13, %ecx
	jmp	.L44
.L73:
	movl	$14, %ecx
	jmp	.L44
	.cfi_endproc
.LFE53:
	.size	main, .-main
	.globl	sz
	.bss
	.align 4
	.type	sz, @object
	.size	sz, 4
sz:
	.zero	4
	.globl	res
	.align 32
	.type	res, @object
	.size	res, 60000
res:
	.zero	60000
	.globl	msg
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"You can go home in %d steps.\n"
	.section	.rodata.str1.8,"aMS",@progbits,1
	.align 8
.LC1:
	.string	"You can not switch off all lights."
	.section	.rodata.str1.1
.LC2:
	.string	"Help me!"
.LC3:
	.string	"Move to room %d.\n"
.LC4:
	.string	"Switch on room %d.\n"
.LC5:
	.string	"Switch off room %d.\n"
	.section	.data.rel.local,"aw"
	.align 32
	.type	msg, @object
	.size	msg, 56
msg:
	.quad	0
	.quad	.LC0
	.quad	.LC1
	.quad	.LC2
	.quad	.LC3
	.quad	.LC4
	.quad	.LC5
	.globl	s_sw
	.bss
	.align 32
	.type	s_sw, @object
	.size	s_sw, 60
s_sw:
	.zero	60
	.globl	sw
	.align 32
	.type	sw, @object
	.size	sw, 900
sw:
	.zero	900
	.globl	s_rm
	.align 32
	.type	s_rm, @object
	.size	s_rm, 60
s_rm:
	.zero	60
	.globl	rm
	.align 32
	.type	rm, @object
	.size	rm, 900
rm:
	.zero	900
	.globl	used
	.align 32
	.type	used, @object
	.size	used, 3932160
used:
	.zero	3932160
	.globl	end
	.align 4
	.type	end, @object
	.size	end, 4
end:
	.zero	4
	.globl	top
	.align 4
	.type	top, @object
	.size	top, 4
top:
	.zero	4
	.globl	q
	.align 32
	.type	q, @object
	.size	q, 3932160
q:
	.zero	3932160
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

rule
	.file	"temp.c"
	.text
	.p2align 4
	.globl	cmp
	.type	cmp, @function
cmp:
.LFB52:
	.cfi_startproc
	endbr64
	movl	(%rdi), %eax
	subl	(%rsi), %eax
	ret
	.cfi_endproc
.LFE52:
	.size	cmp, .-cmp
	.p2align 4
	.globl	in
	.type	in, @function
in:
.LFB51:
	.cfi_startproc
	endbr64
	movq	stdin(%rip), %rdi
	pushq	%r12
	.cfi_def_cfa_offset 16
	.cfi_offset 12, -16
	movq	8(%rdi), %rax
	movq	16(%rdi), %rsi
	cmpq	%rsi, %rax
	jnb	.L17
	leaq	1(%rax), %rcx
	movq	%rcx, 8(%rdi)
	movzbl	(%rax), %eax
.L7:
	movq	%rcx, %rdx
	cmpl	$47, %eax
	jle	.L5
	jmp	.L6
	.p2align 4,,10
	.p2align 3
.L8:
	leaq	1(%rcx), %rdx
	movq	%rdx, 8(%rdi)
	movzbl	(%rcx), %eax
	cmpl	$47, %eax
	jg	.L6
.L9:
	movq	%rdx, %rcx
.L5:
	cmpq	%rsi, %rcx
	jb	.L8
	call	__uflow@PLT
	movq	stdin(%rip), %rdi
	movq	8(%rdi), %rdx
	movq	16(%rdi), %rsi
	cmpl	$47, %eax
	jle	.L9
	.p2align 4,,10
	.p2align 3
.L6:
	xorl	%r12d, %r12d
	jmp	.L13
	.p2align 4,,10
	.p2align 3
.L10:
	leaq	1(%rdx), %rax
	movq	%rax, 8(%rdi)
	movzbl	(%rdx), %eax
	cmpl	$47, %eax
	jle	.L3
.L11:
	movq	8(%rdi), %rdx
	movq	16(%rdi), %rsi
.L13:
	leal	(%r12,%r12,4), %ecx
	andl	$15, %eax
	leal	(%rax,%rcx,2), %r12d
	cmpq	%rsi, %rdx
	jb	.L10
	call	__uflow@PLT
	cmpl	$47, %eax
	jle	.L3
	movq	stdin(%rip), %rdi
	jmp	.L11
	.p2align 4,,10
	.p2align 3
.L3:
	movl	%r12d, %eax
	popq	%r12
	.cfi_remember_state
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L17:
	.cfi_restore_state
	call	__uflow@PLT
	movq	stdin(%rip), %rdi
	movq	8(%rdi), %rcx
	movq	16(%rdi), %rsi
	jmp	.L7
	.cfi_endproc
.LFE51:
	.size	in, .-in
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB53:
	.cfi_startproc
	endbr64
	pushq	%r15
	.cfi_def_cfa_offset 16
	.cfi_offset 15, -16
	pushq	%r14
	.cfi_def_cfa_offset 24
	.cfi_offset 14, -24
	pushq	%r13
	.cfi_def_cfa_offset 32
	.cfi_offset 13, -32
	pushq	%r12
	.cfi_def_cfa_offset 40
	.cfi_offset 12, -40
	pushq	%rbp
	.cfi_def_cfa_offset 48
	.cfi_offset 6, -48
	pushq	%rbx
	.cfi_def_cfa_offset 56
	.cfi_offset 3, -56
	subq	$40, %rsp
	.cfi_def_cfa_offset 96
.L19:
	xorl	%eax, %eax
	call	in
	movl	%eax, 28(%rsp)
	testl	%eax, %eax
	je	.L148
.L49:
	xorl	%eax, %eax
	xorl	%r12d, %r12d
	leaq	rm(%rip), %r13
	call	in
	pxor	%xmm0, %xmm0
	movq	$0, 48+s_rm(%rip)
	movl	$0, 56+s_rm(%rip)
	movl	%eax, %ebx
	movq	$0, 48+s_sw(%rip)
	movl	$0, 56+s_sw(%rip)
	movaps	%xmm0, s_rm(%rip)
	movaps	%xmm0, 16+s_rm(%rip)
	movaps	%xmm0, 32+s_rm(%rip)
	movaps	%xmm0, s_sw(%rip)
	movaps	%xmm0, 16+s_sw(%rip)
	movaps	%xmm0, 32+s_sw(%rip)
	testl	%eax, %eax
	jle	.L23
	.p2align 4,,10
	.p2align 3
.L20:
	xorl	%eax, %eax
	addl	$1, %r12d
	call	in
	leal	-1(%rax), %ebp
	xorl	%eax, %eax
	call	in
	movslq	%ebp, %rsi
	leaq	s_rm(%rip), %rdi
	movl	(%rdi,%rsi,4), %edx
	subl	$1, %eax
	leal	1(%rdx), %ecx
	movl	%ecx, (%rdi,%rsi,4)
	movslq	%edx, %rcx
	movq	%rsi, %rdx
	salq	$4, %rdx
	subq	%rsi, %rdx
	addq	%rcx, %rdx
	movl	%eax, 0(%r13,%rdx,4)
	cltq
	movl	(%rdi,%rax,4), %edx
	leal	1(%rdx), %ecx
	movl	%ecx, (%rdi,%rax,4)
	movslq	%edx, %rcx
	movq	%rax, %rdx
	salq	$4, %rdx
	subq	%rax, %rdx
	leaq	(%rdx,%rcx), %rax
	movl	%ebp, 0(%r13,%rax,4)
	cmpl	%r12d, %ebx
	jne	.L20
.L23:
	movl	28(%rsp), %eax
	movl	28(%rsp), %r12d
	xorl	%r14d, %r14d
	xorl	%ebp, %ebp
	movl	$0, 20(%rsp)
	movl	$1, %ebx
	testl	%eax, %eax
	jg	.L21
	jmp	.L22
	.p2align 4,,10
	.p2align 3
.L56:
	movl	%eax, %r14d
.L21:
	xorl	%eax, %eax
	call	in
	movl	%ebx, %edi
	movl	%r14d, %ecx
	movl	%ebp, %edx
	sall	%cl, %edi
	orl	%edi, %ebp
	testl	%eax, %eax
	leal	1(%r14), %eax
	cmove	%edx, %ebp
	cmpl	%eax, %r12d
	jne	.L56
	xorl	%eax, %eax
	movl	%ebp, 20(%rsp)
	leaq	sw(%rip), %r13
	xorl	%r15d, %r15d
	movl	%r14d, 12(%rsp)
	leaq	s_sw(%rip), %rbp
	movq	%r13, %r14
	call	in
	movl	%eax, %ebx
	testl	%eax, %eax
	je	.L25
	.p2align 4,,10
	.p2align 3
.L149:
	movslq	%r15d, %rax
	movq	%rax, %r12
	salq	$4, %r12
	subq	%rax, %r12
	.p2align 4,,10
	.p2align 3
.L26:
	xorl	%eax, %eax
	call	in
	movl	%eax, %r8d
	movslq	0(%rbp), %rax
	leal	-1(%r8), %edx
	leal	1(%rax), %esi
	addq	%r12, %rax
	movl	%esi, 0(%rbp)
	movl	%edx, 0(%r13,%rax,4)
	subl	$1, %ebx
	jne	.L26
.L27:
	movq	%r14, %rdi
	movslq	%esi, %rsi
	movl	$4, %edx
	addq	$60, %r14
	leaq	cmp(%rip), %rcx
	addq	$4, %rbp
	call	qsort@PLT
	leal	1(%r15), %eax
	cmpl	%r15d, 12(%rsp)
	je	.L22
	movl	%eax, %r15d
	xorl	%eax, %eax
	call	in
	movl	%eax, %ebx
	testl	%eax, %eax
	jne	.L149
.L25:
	movl	0(%rbp), %esi
	jmp	.L27
.L22:
	leaq	used(%rip), %rdi
	xorl	%esi, %esi
	xorl	%r14d, %r14d
	xorl	%r13d, %r13d
	movl	$3932160, %edx
	leaq	q(%rip), %r12
	call	memset@PLT
	movl	$1, %r10d
	movq	%r12, %rbx
	movb	$0, q(%rip)
	movl	$0, top(%rip)
	movq	%rax, %rdi
	movl	%r10d, %edx
	movslq	20(%rsp), %rax
	movl	$1, end(%rip)
	movl	%eax, 4+q(%rip)
	movq	%r12, (%rdi,%rax,8)
	movl	28(%rsp), %eax
	movl	$3, 20(%rsp)
	subl	$1, %eax
	movl	%eax, %esi
	movl	%eax, 12(%rsp)
	xorl	%eax, %eax
	movl	%esi, %ecx
	movl	4(%rbx), %esi
	sall	%cl, %edx
	movsbq	(%rbx), %rcx
	movl	%edx, 24(%rsp)
	movq	%rcx, %r9
	cmpl	12(%rsp), %ecx
	je	.L150
	.p2align 4,,10
	.p2align 3
.L29:
	movslq	%ecx, %r15
	leaq	s_sw(%rip), %rax
	movl	(%rax,%r15,4), %r8d
	testl	%r8d, %r8d
	jle	.L31
	movsbq	%r9b, %rax
	subl	$1, %r8d
	leaq	4+sw(%rip), %r11
	movq	%r15, %rbp
	movq	%rax, %rdx
	salq	$15, %rbp
	salq	$4, %rdx
	subq	%rax, %rdx
	leaq	sw(%rip), %rax
	leaq	(%rax,%rdx,4), %rax
	addq	%r8, %rdx
	leaq	(%r11,%rdx,4), %r11
	jmp	.L33
	.p2align 4,,10
	.p2align 3
.L32:
	addq	$4, %rax
	cmpq	%rax, %r11
	je	.L31
.L33:
	movl	(%rax), %edx
	cmpl	%ecx, %edx
	je	.L32
	movl	%esi, %r8d
	btcl	%edx, %r8d
	movslq	%r8d, %rdx
	addq	%rbp, %rdx
	cmpq	$0, (%rdi,%rdx,8)
	jne	.L32
	movq	%rbx, (%rdi,%rdx,8)
	addq	$4, %rax
	movslq	%r10d, %rdx
	movl	$1, %r14d
	movb	%r9b, (%r12,%rdx,8)
	addl	$1, %r10d
	movl	%r8d, 4(%r12,%rdx,8)
	cmpq	%rax, %r11
	jne	.L33
	.p2align 4,,10
	.p2align 3
.L31:
	leaq	s_rm(%rip), %rax
	movl	(%rax,%r15,4), %ecx
	testl	%ecx, %ecx
	jle	.L34
	movq	%r9, %rdx
	subl	$1, %ecx
	leaq	rm(%rip), %rax
	salq	$4, %rdx
	subq	%r9, %rdx
	movslq	%esi, %r9
	leaq	(%rax,%rdx,4), %rax
	addq	%rcx, %rdx
	leaq	4+rm(%rip), %rcx
	leaq	(%rcx,%rdx,4), %r8
	jmp	.L36
	.p2align 4,,10
	.p2align 3
.L35:
	addq	$4, %rax
	cmpq	%rax, %r8
	je	.L34
.L36:
	movl	(%rax), %ecx
	btl	%ecx, %esi
	jnc	.L35
	movslq	%ecx, %rdx
	salq	$15, %rdx
	addq	%r9, %rdx
	cmpq	$0, (%rdi,%rdx,8)
	jne	.L35
	movq	%rbx, (%rdi,%rdx,8)
	addq	$4, %rax
	movslq	%r10d, %rdx
	movl	$1, %r14d
	movb	%cl, (%r12,%rdx,8)
	addl	$1, %r10d
	movl	%esi, 4(%r12,%rdx,8)
	cmpq	%rax, %r8
	jne	.L36
	.p2align 4,,10
	.p2align 3
.L34:
	addl	$1, %r13d
	addq	$8, %rbx
	movl	$1, %eax
	cmpl	%r10d, %r13d
	jge	.L151
	movsbq	(%rbx), %rcx
	movl	4(%rbx), %esi
	movl	%r13d, 16(%rsp)
	movq	%rcx, %r9
	cmpl	12(%rsp), %ecx
	jne	.L29
.L150:
	cmpl	%esi, 24(%rsp)
	je	.L30
	movl	$2, 20(%rsp)
	jmp	.L29
.L151:
	movl	%r13d, top(%rip)
	testb	%r14b, %r14b
	je	.L50
	movl	%r10d, end(%rip)
.L50:
	movslq	20(%rsp), %rax
	leaq	msg(%rip), %rbx
	movq	(%rbx,%rax,8), %rdi
	call	puts@PLT
	xorl	%eax, %eax
	call	in
	movl	%eax, 28(%rsp)
	testl	%eax, %eax
	jne	.L49
.L148:
	addq	$40, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 56
	xorl	%eax, %eax
	popq	%rbx
	.cfi_def_cfa_offset 48
	popq	%rbp
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	ret
.L30:
	.cfi_restore_state
	testb	%al, %al
	je	.L51
	movl	16(%rsp), %eax
	movl	%eax, top(%rip)
.L51:
	testb	%r14b, %r14b
	je	.L52
	movl	%r10d, end(%rip)
.L52:
	movl	28(%rsp), %r15d
	xorl	%r10d, %r10d
	xorl	%edx, %edx
	movl	%ecx, %eax
	movl	$0, sz(%rip)
	leaq	res(%rip), %r8
	jmp	.L53
	.p2align 4,,10
	.p2align 3
.L39:
	movslq	%edx, %rcx
	movl	$1, %r10d
	addl	$1, %edx
	movb	$4, (%r8,%rcx,2)
	movb	%r9b, 1(%r8,%rcx,2)
.L41:
	movl	%eax, %esi
	movsbl	%r11b, %eax
	movl	%eax, %r9d
.L53:
	cltq
	movslq	%esi, %rcx
	salq	$15, %rax
	addq	%rcx, %rax
	movq	(%rdi,%rax,8), %rax
	movzbl	(%rax), %r11d
	movl	4(%rax), %eax
	cmpb	%r11b, %r9b
	jne	.L39
	cmpl	%eax, %esi
	je	.L40
	testl	%r15d, %r15d
	jle	.L41
	movl	%esi, %ecx
	xorl	%eax, %ecx
	testb	$1, %cl
	jne	.L152
	cmpl	$1, %r15d
	je	.L41
	testb	$2, %cl
	jne	.L60
	cmpl	$2, %r15d
	je	.L41
	testb	$4, %cl
	jne	.L61
	cmpl	$3, %r15d
	je	.L41
	testb	$8, %cl
	jne	.L62
	cmpl	$4, %r15d
	je	.L41
	testb	$16, %cl
	jne	.L63
	cmpl	$5, %r15d
	je	.L41
	testb	$32, %cl
	jne	.L64
	cmpl	$6, %r15d
	je	.L41
	testb	$64, %cl
	jne	.L65
	cmpl	$7, %r15d
	je	.L41
	testb	$-128, %cl
	jne	.L66
	cmpl	$8, %r15d
	je	.L41
	testb	$1, %ch
	jne	.L67
	cmpl	$9, %r15d
	je	.L41
	testb	$2, %ch
	jne	.L68
	cmpl	$10, %r15d
	je	.L41
	testb	$4, %ch
	jne	.L69
	cmpl	$11, %r15d
	je	.L41
	testb	$8, %ch
	jne	.L70
	cmpl	$12, %r15d
	je	.L41
	testb	$16, %ch
	jne	.L71
	cmpl	$13, %r15d
	je	.L41
	testb	$32, %ch
	jne	.L72
	cmpl	$14, %r15d
	je	.L41
	andb	$64, %ch
	jne	.L73
	movl	$15, %ecx
	cmpl	$15, %r15d
	je	.L41
.L44:
	sarl	%cl, %esi
.L42:
	andl	$1, %esi
	movl	$6, %r10d
	xorl	%r9d, %r9d
	movslq	%edx, %rbp
	subl	%esi, %r10d
	addl	$1, %edx
	movb	%r10b, %r9b
	movl	$1, %r10d
	movl	%r9d, %ebx
	movb	%cl, %bh
	movw	%bx, (%r8,%rbp,2)
	jmp	.L41
.L40:
	testb	%r10b, %r10b
	je	.L75
	movl	%edx, sz(%rip)
.L45:
	movq	8+msg(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	leaq	res(%rip), %rbp
	leaq	msg(%rip), %rbx
	call	__printf_chk@PLT
	movl	sz(%rip), %edx
	leal	-1(%rdx), %eax
	movl	%eax, sz(%rip)
	testl	%edx, %edx
	je	.L19
	.p2align 4,,10
	.p2align 3
.L46:
	cltq
	movl	$1, %edi
	movsbl	1(%rbp,%rax,2), %edx
	movsbq	0(%rbp,%rax,2), %rax
	movq	(%rbx,%rax,8), %rsi
	addl	$1, %edx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	sz(%rip), %edx
	leal	-1(%rdx), %eax
	movl	%eax, sz(%rip)
	testl	%edx, %edx
	jne	.L46
	jmp	.L19
.L152:
	xorl	%ecx, %ecx
	jmp	.L42
.L60:
	movl	$1, %ecx
	jmp	.L44
.L75:
	xorl	%edx, %edx
	jmp	.L45
.L61:
	movl	$2, %ecx
	jmp	.L44
.L62:
	movl	$3, %ecx
	jmp	.L44
.L63:
	movl	$4, %ecx
	jmp	.L44
.L64:
	movl	$5, %ecx
	jmp	.L44
.L65:
	movl	$6, %ecx
	jmp	.L44
.L66:
	movl	$7, %ecx
	jmp	.L44
.L67:
	movl	$8, %ecx
	jmp	.L44
.L68:
	movl	$9, %ecx
	jmp	.L44
.L69:
	movl	$10, %ecx
	jmp	.L44
.L70:
	movl	$11, %ecx
	jmp	.L44
.L71:
	movl	$12, %ecx
	jmp	.L44
.L72:
	movl	$13, %ecx
	jmp	.L44
.L73:
	movl	$14, %ecx
	jmp	.L44
	.cfi_endproc
.LFE53:
	.size	main, .-main
	.globl	sz
	.bss
	.align 4
	.type	sz, @object
	.size	sz, 4
sz:
	.zero	4
	.globl	res
	.align 32
	.type	res, @object
	.size	res, 60000
res:
	.zero	60000
	.globl	msg
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"You can go home in %d steps.\n"
	.section	.rodata.str1.8,"aMS",@progbits,1
	.align 8
.LC1:
	.string	"You can not switch off all lights."
	.section	.rodata.str1.1
.LC2:
	.string	"Help me!"
.LC3:
	.string	"Move to room %d.\n"
.LC4:
	.string	"Switch on room %d.\n"
.LC5:
	.string	"Switch off room %d.\n"
	.section	.data.rel.local,"aw"
	.align 32
	.type	msg, @object
	.size	msg, 56
msg:
	.quad	0
	.quad	.LC0
	.quad	.LC1
	.quad	.LC2
	.quad	.LC3
	.quad	.LC4
	.quad	.LC5
	.globl	s_sw
	.bss
	.align 32
	.type	s_sw, @object
	.size	s_sw, 60
s_sw:
	.zero	60
	.globl	sw
	.align 32
	.type	sw, @object
	.size	sw, 900
sw:
	.zero	900
	.globl	s_rm
	.align 32
	.type	s_rm, @object
	.size	s_rm, 60
s_rm:
	.zero	60
	.globl	rm
	.align 32
	.type	rm, @object
	.size	rm, 900
rm:
	.zero	900
	.globl	used
	.align 32
	.type	used, @object
	.size	used, 3932160
used:
	.zero	3932160
	.globl	end
	.align 4
	.type	end, @object
	.size	end, 4
end:
	.zero	4
	.globl	top
	.align 4
	.type	top, @object
	.size	top, 4
top:
	.zero	4
	.globl	q
	.align 32
	.type	q, @object
	.size	q, 3932160
q:
	.zero	3932160
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

// AOJ 0172: Doctor's Research Rooms
// 2018.1.24 bal4u@uu

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct { char rm; int light; } Q;
Q q[491520]; int top, end;
Q *used[15][32768];

int rm[15][15], s_rm[15];
int sw[15][15], s_sw[15];

char *msg[7] = {0,
"You can go home in %d steps.\n",
"You can not switch off all lights.",
"Help me!",
"Move to room %d.\n",
"Switch on room %d.\n",
"Switch off room %d.\n" };

typedef struct { char msg, rm; } T;
T res[30000]; int sz;

//#define getchar_unlocked()  getchar()
int in()
{
	int n = 0;
	int c = getchar_unlocked();
while (c < '0') c = getchar_unlocked();
	do n = (n<<3)+(n<<1) + (c & 0xf), c = getchar_unlocked();
	while (c >= '0');
	return n;
}

int cmp(int *a, int *b) { return *a - *b; }

int main()
{
	int n, m, i, j, s, t, ans;
	int room, light;

	while (n = in()) {
		m = in();
		memset(s_rm, 0, sizeof(s_rm));
		memset(s_sw, 0, sizeof(s_sw));

		for (i = 0; i < m; i++){
			s = in()-1, t = in()-1;
			rm[s][s_rm[s]++] = t;
			rm[t][s_rm[t]++] = s;
		}

		light = 0; for (i = 0; i < n; i++) if (in()) light |= 1 << i;

		for (i = 0; i < n; i++) {
			j = in(); while (j--) sw[i][s_sw[i]++] = in()-1;
			qsort(sw[i], s_sw[i], sizeof(int), cmp);
        }

		memset(used, 0, sizeof(used));
		q[0].rm = 0, q[0].light = light; top = 0, end = 1;
		used[0][light] = q;

		ans = 3;
		while (top < end) {
			s = q[top].rm, t = q[top].light;

			if (s == n-1) {
				if (t == 1<<(n-1)) { ans = 1; break; }
				ans = 2;
			}

			for (i = 0; i < s_sw[s]; i++) if (sw[s][i] != s) {
//			for (i = 0; i < s_sw[s]; i++) {
				light = t ^ (1<<sw[s][i]);
				if (used[s][light] == 0) {
					used[s][light] = q + top;
					q[end].rm = s, q[end++].light = light;
				}
			}

			for (i = 0; i < s_rm[s]; i++) {
				room = rm[s][i];
				if (t & (1<<room)) {
					if (used[room][t] == 0) {
						used[room][t] = q + top;
						q[end].rm = room, q[end++].light = t;
					}
				}
			}

			top++;
		}
 
		if (ans > 1) puts(msg[ans]);
		else {
			Q p = q[top];
			sz = 0;
			while (1) {
				Q nxt = *used[p.rm][p.light];
				if (nxt.rm == p.rm && nxt.light == p.light) break;
				if (p.rm != nxt.rm) res[sz].msg = 4, res[sz++].rm = p.rm;
				else for (i = 0; i < n; i++) if ((p.light & (1<<i)) ^ (nxt.light & (1<<i))) {
					if (p.light & (1<<i)) res[sz].msg = 5; else res[sz].msg = 6;
					res[sz++].rm = i;
					break;
				}
				p = nxt;
			}
			printf(msg[ans], sz);
			while (sz--) printf(msg[res[sz].msg], 1 + res[sz].rm);
		}
    }
    return 0;
}

4 3
1 2
1 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
2 2 3
4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
1 3
4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
2 1 2
2 2 3
0 0
 4 3
1 2
1 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
2 2 3
4 3
1 2
2 3
2 2
1 0 0 0
2 2 3
0
3 1 2 4
1 3
4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
2 1 2
2 2 3
0 0
 4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
2 2 3
4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
1 3
4 3
1 2
2 1
2 4
1 0 0 0
2 2 3
0
2 1 2
2 2 3
0 0
 4 3
1 2
1 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
2 2 3
4 3
1 2
2 3
2 2
1 0 0 0
2 2 3
0
3 1 2 4
1 3
4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
2 1 4
2 2 3
0 0
 4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
2 2 3
4 3
2 2
2 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
1 3
4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
2 1 2
2 2 3
0 0
 4 3
1 2
1 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
2 2 3
4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
1 3
4 3
1 2
2 3
2 4
1 0 0 1
2 2 3
0
2 1 1
2 2 3
0 0
 4 3
1 2
2 3
2 2
1 0 0 0
2 2 3
0
3 1 2 4
2 2 3
4 3
2 2
2 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
1 3
4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
2 1 2
2 2 3
0 0
 4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
2 2 3
4 3
1 2
2 3
2 2
1 0 0 0
2 2 3
0
3 1 2 4
1 3
4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
2 1 4
2 2 3
0 0
 4 3
1 2
1 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
2 2 3
4 3
1 2
2 3
2 2
1 0 0 0
2 2 3
0
3 1 2 4
1 3
4 3
1 2
2 3
2 4
1 0 0 0
2 4 2
0
2 1 4
2 2 3
0 0
 4 3
1 2
1 3
2 4
1 0 0 0
2 2 3
0
3 1 2 4
2 2 3
4 3
1 2
2 3
2 4
1 0 0 0
2 2 3
0
3 1 4 3
1 3
4 3
1 2
2 3
2 4
1 0 0 1
2 2 3
0
2 1 2
2 4 2
0 0

You can not switch off all lights.
You can not switch off all lights.
Help me!
 You can not switch off all lights.
Help me!
Help me!
 You can go home in 10 steps.
Switch on room 2.
Switch on room 3.
Move to room 2.
Move to room 3.
Switch off room 1.
Switch on room 4.
Move to room 2.
Move to room 4.
Switch off room 2.
Switch off room 3.
You can not switch off all lights.
Help me!
 You can not switch off all lights.
Help me!
You can go home in 10 steps.
Switch on room 2.
Switch on room 3.
Move to room 2.
Move to room 3.
Switch off room 1.
Switch on room 4.
Move to room 2.
Move to room 4.
Switch off room 2.
Switch off room 3.
 You can go home in 10 steps.
Switch on room 2.
Switch on room 3.
Move to room 2.
Move to room 3.
Switch off room 1.
Switch on room 4.
Move to room 2.
Move to room 4.
Switch off room 2.
Switch off room 3.
Help me!
Help me!
 You can not switch off all lights.
You can not switch off all lights.
You can go home in 9 steps.
Switch on room 2.
Switch on room 3.
Move to room 2.
Move to room 3.
Switch off room 1.
Move to room 2.
Move to room 4.
Switch off room 2.
Switch off room 3.
 Help me!
Help me!
Help me!
 You can go home in 10 steps.
Switch on room 2.
Switch on room 3.
Move to room 2.
Move to room 3.
Switch off room 1.
Switch on room 4.
Move to room 2.
Move to room 4.
Switch off room 2.
Switch off room 3.
Help me!
You can go home in 10 steps.
Switch on room 2.
Switch on room 3.
Move to room 2.
Move to room 3.
Switch off room 1.
Switch on room 4.
Move to room 2.
Move to room 4.
Switch off room 2.
Switch off room 3.
 You can not switch off all lights.
Help me!
You can go home in 12 steps.
Switch on room 2.
Switch on room 4.
Move to room 2.
Move to room 4.
Switch on room 3.
Move to room 2.
Move to room 3.
Switch off room 1.
Move to room 2.
Move to room 4.
Switch off room 2.
Switch off room 3.
 You can not switch off all lights.
You can not switch off all lights.
You can not switch off all lights.

Given the following C code and unoptimized assembly code, your task is to generate highly optimized x86-64 assembly code.
C Code:

```c
// AOJ 0172: Doctor's Research Rooms
// 2018.1.24 bal4u@uu

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct { char rm; int light; } Q;
Q q[491520]; int top, end;
Q *used[15][32768];

int rm[15][15], s_rm[15];
int sw[15][15], s_sw[15];

char *msg[7] = {0,
"You can go home in %d steps.\n",
"You can not switch off all lights.",
"Help me!",
"Move to room %d.\n",
"Switch on room %d.\n",
"Switch off room %d.\n" };

typedef struct { char msg, rm; } T;
T res[30000]; int sz;

//#define getchar_unlocked()  getchar()
int in()
{
	int n = 0;
	int c = getchar_unlocked();
while (c < '0') c = getchar_unlocked();
	do n = (n<<3)+(n<<1) + (c & 0xf), c = getchar_unlocked();
	while (c >= '0');
	return n;
}

int cmp(int *a, int *b) { return *a - *b; }

int main()
{
	int n, m, i, j, s, t, ans;
	int room, light;

	while (n = in()) {
		m = in();
		memset(s_rm, 0, sizeof(s_rm));
		memset(s_sw, 0, sizeof(s_sw));

		for (i = 0; i < m; i++){
			s = in()-1, t = in()-1;
			rm[s][s_rm[s]++] = t;
			rm[t][s_rm[t]++] = s;
		}

		light = 0; for (i = 0; i < n; i++) if (in()) light |= 1 << i;

		for (i = 0; i < n; i++) {
			j = in(); while (j--) sw[i][s_sw[i]++] = in()-1;
			qsort(sw[i], s_sw[i], sizeof(int), cmp);
        }

		memset(used, 0, sizeof(used));
		q[0].rm = 0, q[0].light = light; top = 0, end = 1;
		used[0][light] = q;

		ans = 3;
		while (top < end) {
			s = q[top].rm, t = q[top].light;

			if (s == n-1) {
				if (t == 1<<(n-1)) { ans = 1; break; }
				ans = 2;
			}

			for (i = 0; i < s_sw[s]; i++) if (sw[s][i] != s) {
//			for (i = 0; i < s_sw[s]; i++) {
				light = t ^ (1<<sw[s][i]);
				if (used[s][light] == 0) {
					used[s][light] = q + top;
					q[end].rm = s, q[end++].light = light;
				}
			}

			for (i = 0; i < s_rm[s]; i++) {
				room = rm[s][i];
				if (t & (1<<room)) {
					if (used[room][t] == 0) {
						used[room][t] = q + top;
						q[end].rm = room, q[end++].light = t;
					}
				}
			}

			top++;
		}
 
		if (ans > 1) puts(msg[ans]);
		else {
			Q p = q[top];
			sz = 0;
			while (1) {
				Q nxt = *used[p.rm][p.light];
				if (nxt.rm == p.rm && nxt.light == p.light) break;
				if (p.rm != nxt.rm) res[sz].msg = 4, res[sz++].rm = p.rm;
				else for (i = 0; i < n; i++) if ((p.light & (1<<i)) ^ (nxt.light & (1<<i))) {
					if (p.light & (1<<i)) res[sz].msg = 5; else res[sz].msg = 6;
					res[sz++].rm = i;
					break;
				}
				p = nxt;
			}
			printf(msg[ans], sz);
			while (sz--) printf(msg[res[sz].msg], 1 + res[sz].rm);
		}
    }
    return 0;
}
```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.globl	q
	.bss
	.align 32
	.type	q, @object
	.size	q, 3932160
q:
	.zero	3932160
	.globl	top
	.align 4
	.type	top, @object
	.size	top, 4
top:
	.zero	4
	.globl	end
	.align 4
	.type	end, @object
	.size	end, 4
end:
	.zero	4
	.globl	used
	.align 32
	.type	used, @object
	.size	used, 3932160
used:
	.zero	3932160
	.globl	rm
	.align 32
	.type	rm, @object
	.size	rm, 900
rm:
	.zero	900
	.globl	s_rm
	.align 32
	.type	s_rm, @object
	.size	s_rm, 60
s_rm:
	.zero	60
	.globl	sw
	.align 32
	.type	sw, @object
	.size	sw, 900
sw:
	.zero	900
	.globl	s_sw
	.align 32
	.type	s_sw, @object
	.size	s_sw, 60
s_sw:
	.zero	60
	.globl	msg
	.section	.rodata
.LC0:
	.string	"You can go home in %d steps.\n"
	.align 8
.LC1:
	.string	"You can not switch off all lights."
.LC2:
	.string	"Help me!"
.LC3:
	.string	"Move to room %d.\n"
.LC4:
	.string	"Switch on room %d.\n"
.LC5:
	.string	"Switch off room %d.\n"
	.section	.data.rel.local,"aw"
	.align 32
	.type	msg, @object
	.size	msg, 56
msg:
	.quad	0
	.quad	.LC0
	.quad	.LC1
	.quad	.LC2
	.quad	.LC3
	.quad	.LC4
	.quad	.LC5
	.globl	res
	.bss
	.align 32
	.type	res, @object
	.size	res, 60000
res:
	.zero	60000
	.globl	sz
	.align 4
	.type	sz, @object
	.size	sz, 4
sz:
	.zero	4
	.text
	.globl	in
	.type	in, @function
in:
.LFB6:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	$0, -8(%rbp)
	call	getchar_unlocked@PLT
	movl	%eax, -4(%rbp)
	jmp	.L2
.L3:
	call	getchar_unlocked@PLT
	movl	%eax, -4(%rbp)
.L2:
	cmpl	$47, -4(%rbp)
	jle	.L3
.L4:
	movl	-8(%rbp), %eax
	leal	0(,%rax,8), %edx
	movl	-8(%rbp), %eax
	addl	%eax, %eax
	addl	%eax, %edx
	movl	-4(%rbp), %eax
	andl	$15, %eax
	addl	%edx, %eax
	movl	%eax, -8(%rbp)
	call	getchar_unlocked@PLT
	movl	%eax, -4(%rbp)
	cmpl	$47, -4(%rbp)
	jg	.L4
	movl	-8(%rbp), %eax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	in, .-in
	.globl	cmp
	.type	cmp, @function
cmp:
.LFB7:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movl	(%rax), %edx
	movq	-16(%rbp), %rax
	movl	(%rax), %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	cmp, .-cmp
	.globl	main
	.type	main, @function
main:
.LFB8:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$64, %rsp
	jmp	.L9
.L42:
	movl	$0, %eax
	call	in
	movl	%eax, -32(%rbp)
	movl	$60, %edx
	movl	$0, %esi
	leaq	s_rm(%rip), %rax
	movq	%rax, %rdi
	call	memset@PLT
	movl	$60, %edx
	movl	$0, %esi
	leaq	s_sw(%rip), %rax
	movq	%rax, %rdi
	call	memset@PLT
	movl	$0, -52(%rbp)
	jmp	.L10
.L11:
	movl	$0, %eax
	call	in
	subl	$1, %eax
	movl	%eax, -28(%rbp)
	movl	$0, %eax
	call	in
	subl	$1, %eax
	movl	%eax, -24(%rbp)
	movl	-28(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	leal	1(%rax), %edx
	movl	-28(%rbp), %ecx
	movslq	%ecx, %rcx
	leaq	0(,%rcx,4), %rsi
	leaq	s_rm(%rip), %rcx
	movl	%edx, (%rsi,%rcx)
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rcx
	leaq	rm(%rip), %rdx
	movl	-24(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
	movl	-24(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	leal	1(%rax), %edx
	movl	-24(%rbp), %ecx
	movslq	%ecx, %rcx
	leaq	0(,%rcx,4), %rsi
	leaq	s_rm(%rip), %rcx
	movl	%edx, (%rsi,%rcx)
	movslq	%eax, %rcx
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rcx
	leaq	rm(%rip), %rdx
	movl	-28(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
	addl	$1, -52(%rbp)
.L10:
	movl	-52(%rbp), %eax
	cmpl	-32(%rbp), %eax
	jl	.L11
	movl	$0, -40(%rbp)
	movl	$0, -52(%rbp)
	jmp	.L12
.L14:
	movl	$0, %eax
	call	in
	testl	%eax, %eax
	je	.L13
	movl	-52(%rbp), %eax
	movl	$1, %edx
	movl	%eax, %ecx
	sall	%cl, %edx
	movl	%edx, %eax
	orl	%eax, -40(%rbp)
.L13:
	addl	$1, -52(%rbp)
.L12:
	movl	-52(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jl	.L14
	movl	$0, -52(%rbp)
	jmp	.L15
.L18:
	movl	$0, %eax
	call	in
	movl	%eax, -48(%rbp)
	jmp	.L16
.L17:
	movl	$0, %eax
	call	in
	movl	%eax, %edx
	movl	-52(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rcx
	leaq	s_sw(%rip), %rax
	movl	(%rcx,%rax), %eax
	leal	1(%rax), %ecx
	movl	-52(%rbp), %esi
	movslq	%esi, %rsi
	leaq	0(,%rsi,4), %rdi
	leaq	s_sw(%rip), %rsi
	movl	%ecx, (%rdi,%rsi)
	leal	-1(%rdx), %ecx
	movslq	%eax, %rsi
	movl	-52(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rsi, %rax
	leaq	0(,%rax,4), %rdx
	leaq	sw(%rip), %rax
	movl	%ecx, (%rdx,%rax)
.L16:
	movl	-48(%rbp), %eax
	leal	-1(%rax), %edx
	movl	%edx, -48(%rbp)
	testl	%eax, %eax
	jne	.L17
	movl	-52(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	movslq	%eax, %rsi
	movl	-52(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	salq	$2, %rax
	leaq	sw(%rip), %rdx
	addq	%rdx, %rax
	leaq	cmp(%rip), %rdx
	movq	%rdx, %rcx
	movl	$4, %edx
	movq	%rax, %rdi
	call	qsort@PLT
	addl	$1, -52(%rbp)
.L15:
	movl	-52(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jl	.L18
	movl	$3932160, %edx
	movl	$0, %esi
	leaq	used(%rip), %rax
	movq	%rax, %rdi
	call	memset@PLT
	movb	$0, q(%rip)
	movl	-40(%rbp), %eax
	movl	%eax, 4+q(%rip)
	movl	$0, top(%rip)
	movl	$1, end(%rip)
	movl	-40(%rbp), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	leaq	q(%rip), %rcx
	movq	%rcx, (%rdx,%rax)
	movl	$3, -44(%rbp)
	jmp	.L19
.L29:
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movzbl	(%rdx,%rax), %eax
	movsbl	%al, %eax
	movl	%eax, -28(%rbp)
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	4+q(%rip), %rax
	movl	(%rdx,%rax), %eax
	movl	%eax, -24(%rbp)
	movl	-36(%rbp), %eax
	subl	$1, %eax
	cmpl	%eax, -28(%rbp)
	jne	.L20
	movl	-36(%rbp), %eax
	subl	$1, %eax
	movl	$1, %edx
	movl	%eax, %ecx
	sall	%cl, %edx
	movl	%edx, %eax
	cmpl	%eax, -24(%rbp)
	jne	.L21
	movl	$1, -44(%rbp)
	jmp	.L22
.L21:
	movl	$2, -44(%rbp)
.L20:
	movl	$0, -52(%rbp)
	jmp	.L23
.L25:
	movl	-52(%rbp), %eax
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rdx
	leaq	sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	cmpl	%eax, -28(%rbp)
	je	.L24
	movl	-52(%rbp), %eax
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rdx
	leaq	sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	movl	$1, %edx
	movl	%eax, %ecx
	sall	%cl, %edx
	movl	%edx, %eax
	xorl	-24(%rbp), %eax
	movl	%eax, -40(%rbp)
	movl	-40(%rbp), %eax
	movslq	%eax, %rdx
	movl	-28(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	(%rdx,%rax), %rax
	testq	%rax, %rax
	jne	.L24
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	leaq	(%rdx,%rax), %rcx
	movl	-40(%rbp), %eax
	movslq	%eax, %rdx
	movl	-28(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	%rcx, (%rdx,%rax)
	movl	end(%rip), %eax
	movl	-28(%rbp), %edx
	movl	%edx, %ecx
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movb	%cl, (%rdx,%rax)
	movl	end(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, end(%rip)
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	4+q(%rip), %rdx
	movl	-40(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
.L24:
	addl	$1, -52(%rbp)
.L23:
	movl	-28(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	cmpl	%eax, -52(%rbp)
	jl	.L25
	movl	$0, -52(%rbp)
	jmp	.L26
.L28:
	movl	-52(%rbp), %eax
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rdx
	leaq	rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	movl	%eax, -20(%rbp)
	movl	-20(%rbp), %eax
	movl	-24(%rbp), %edx
	movl	%eax, %ecx
	sarl	%cl, %edx
	movl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L27
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movl	-20(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	(%rdx,%rax), %rax
	testq	%rax, %rax
	jne	.L27
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	leaq	(%rdx,%rax), %rcx
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movl	-20(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	%rcx, (%rdx,%rax)
	movl	end(%rip), %eax
	movl	-20(%rbp), %edx
	movl	%edx, %ecx
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movb	%cl, (%rdx,%rax)
	movl	end(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, end(%rip)
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	4+q(%rip), %rdx
	movl	-24(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
.L27:
	addl	$1, -52(%rbp)
.L26:
	movl	-28(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	cmpl	%eax, -52(%rbp)
	jl	.L28
	movl	top(%rip), %eax
	addl	$1, %eax
	movl	%eax, top(%rip)
.L19:
	movl	top(%rip), %edx
	movl	end(%rip), %eax
	cmpl	%eax, %edx
	jl	.L29
.L22:
	cmpl	$1, -44(%rbp)
	jle	.L30
	movl	-44(%rbp), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	msg(%rip), %rax
	movq	(%rdx,%rax), %rax
	movq	%rax, %rdi
	call	puts@PLT
	jmp	.L9
.L30:
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movq	(%rdx,%rax), %rax
	movq	%rax, -16(%rbp)
	movl	$0, sz(%rip)
.L40:
	movzbl	-16(%rbp), %eax
	movsbl	%al, %eax
	movl	-12(%rbp), %edx
	movslq	%edx, %rdx
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	(%rdx,%rax), %rax
	movq	(%rax), %rax
	movq	%rax, -8(%rbp)
	movzbl	-8(%rbp), %edx
	movzbl	-16(%rbp), %eax
	cmpb	%al, %dl
	jne	.L31
	movl	-4(%rbp), %edx
	movl	-12(%rbp), %eax
	cmpl	%eax, %edx
	jne	.L31
	movl	sz(%rip), %edx
	movl	-44(%rbp), %eax
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	msg(%rip), %rax
	movq	(%rcx,%rax), %rax
	movl	%edx, %esi
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	jmp	.L32
.L31:
	movzbl	-16(%rbp), %edx
	movzbl	-8(%rbp), %eax
	cmpb	%al, %dl
	je	.L33
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	res(%rip), %rax
	movb	$4, (%rdx,%rax)
	movl	sz(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, sz(%rip)
	movzbl	-16(%rbp), %edx
	cltq
	leaq	(%rax,%rax), %rcx
	leaq	1+res(%rip), %rax
	movb	%dl, (%rcx,%rax)
	jmp	.L34
.L33:
	movl	$0, -52(%rbp)
	jmp	.L35
.L39:
	movl	-12(%rbp), %edx
	movl	-4(%rbp), %eax
	xorl	%eax, %edx
	movl	-52(%rbp), %eax
	movl	%eax, %ecx
	sarl	%cl, %edx
	movl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L36
	movl	-12(%rbp), %edx
	movl	-52(%rbp), %eax
	movl	%eax, %ecx
	sarl	%cl, %edx
	movl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L37
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	res(%rip), %rax
	movb	$5, (%rdx,%rax)
	jmp	.L38
.L37:
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	res(%rip), %rax
	movb	$6, (%rdx,%rax)
.L38:
	movl	sz(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, sz(%rip)
	movl	-52(%rbp), %edx
	movl	%edx, %ecx
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	1+res(%rip), %rax
	movb	%cl, (%rdx,%rax)
	jmp	.L34
.L36:
	addl	$1, -52(%rbp)
.L35:
	movl	-52(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jl	.L39
.L34:
	movq	-8(%rbp), %rax
	movq	%rax, -16(%rbp)
	jmp	.L40
.L41:
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	1+res(%rip), %rax
	movzbl	(%rdx,%rax), %eax
	movsbl	%al, %eax
	leal	1(%rax), %edx
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rcx
	leaq	res(%rip), %rax
	movzbl	(%rcx,%rax), %eax
	movsbl	%al, %eax
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	msg(%rip), %rax
	movq	(%rcx,%rax), %rax
	movl	%edx, %esi
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L32:
	movl	sz(%rip), %eax
	leal	-1(%rax), %edx
	movl	%edx, sz(%rip)
	testl	%eax, %eax
	jne	.L41
.L9:
	movl	$0, %eax
	call	in
	movl	%eax, -36(%rbp)
	cmpl	$0, -36(%rbp)
	jne	.L42
	movl	$0, %eax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
```

Only output the optimized assembly code. Do not include any other text. Do not write any comments in the assembly code. Wrap the assembly code in ```assembly``` tags.
train
	.file	"temp.c"
	.text
	.globl	q
	.bss
	.align 32
	.type	q, @object
	.size	q, 3932160
q:
	.zero	3932160
	.globl	top
	.align 4
	.type	top, @object
	.size	top, 4
top:
	.zero	4
	.globl	end
	.align 4
	.type	end, @object
	.size	end, 4
end:
	.zero	4
	.globl	used
	.align 32
	.type	used, @object
	.size	used, 3932160
used:
	.zero	3932160
	.globl	rm
	.align 32
	.type	rm, @object
	.size	rm, 900
rm:
	.zero	900
	.globl	s_rm
	.align 32
	.type	s_rm, @object
	.size	s_rm, 60
s_rm:
	.zero	60
	.globl	sw
	.align 32
	.type	sw, @object
	.size	sw, 900
sw:
	.zero	900
	.globl	s_sw
	.align 32
	.type	s_sw, @object
	.size	s_sw, 60
s_sw:
	.zero	60
	.globl	msg
	.section	.rodata
.LC0:
	.string	"You can go home in %d steps.\n"
	.align 8
.LC1:
	.string	"You can not switch off all lights."
.LC2:
	.string	"Help me!"
.LC3:
	.string	"Move to room %d.\n"
.LC4:
	.string	"Switch on room %d.\n"
.LC5:
	.string	"Switch off room %d.\n"
	.section	.data.rel.local,"aw"
	.align 32
	.type	msg, @object
	.size	msg, 56
msg:
	.quad	0
	.quad	.LC0
	.quad	.LC1
	.quad	.LC2
	.quad	.LC3
	.quad	.LC4
	.quad	.LC5
	.globl	res
	.bss
	.align 32
	.type	res, @object
	.size	res, 60000
res:
	.zero	60000
	.globl	sz
	.align 4
	.type	sz, @object
	.size	sz, 4
sz:
	.zero	4
	.text
	.globl	in
	.type	in, @function
in:
.LFB6:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	$0, -8(%rbp)
	call	getchar_unlocked@PLT
	movl	%eax, -4(%rbp)
	jmp	.L2
.L3:
	call	getchar_unlocked@PLT
	movl	%eax, -4(%rbp)
.L2:
	cmpl	$47, -4(%rbp)
	jle	.L3
.L4:
	movl	-8(%rbp), %eax
	leal	0(,%rax,8), %edx
	movl	-8(%rbp), %eax
	addl	%eax, %eax
	addl	%eax, %edx
	movl	-4(%rbp), %eax
	andl	$15, %eax
	addl	%edx, %eax
	movl	%eax, -8(%rbp)
	call	getchar_unlocked@PLT
	movl	%eax, -4(%rbp)
	cmpl	$47, -4(%rbp)
	jg	.L4
	movl	-8(%rbp), %eax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	in, .-in
	.globl	cmp
	.type	cmp, @function
cmp:
.LFB7:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movl	(%rax), %edx
	movq	-16(%rbp), %rax
	movl	(%rax), %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	cmp, .-cmp
	.globl	main
	.type	main, @function
main:
.LFB8:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$64, %rsp
	jmp	.L9
.L42:
	movl	$0, %eax
	call	in
	movl	%eax, -32(%rbp)
	movl	$60, %edx
	movl	$0, %esi
	leaq	s_rm(%rip), %rax
	movq	%rax, %rdi
	call	memset@PLT
	movl	$60, %edx
	movl	$0, %esi
	leaq	s_sw(%rip), %rax
	movq	%rax, %rdi
	call	memset@PLT
	movl	$0, -52(%rbp)
	jmp	.L10
.L11:
	movl	$0, %eax
	call	in
	subl	$1, %eax
	movl	%eax, -28(%rbp)
	movl	$0, %eax
	call	in
	subl	$1, %eax
	movl	%eax, -24(%rbp)
	movl	-28(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	leal	1(%rax), %edx
	movl	-28(%rbp), %ecx
	movslq	%ecx, %rcx
	leaq	0(,%rcx,4), %rsi
	leaq	s_rm(%rip), %rcx
	movl	%edx, (%rsi,%rcx)
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rcx
	leaq	rm(%rip), %rdx
	movl	-24(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
	movl	-24(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	leal	1(%rax), %edx
	movl	-24(%rbp), %ecx
	movslq	%ecx, %rcx
	leaq	0(,%rcx,4), %rsi
	leaq	s_rm(%rip), %rcx
	movl	%edx, (%rsi,%rcx)
	movslq	%eax, %rcx
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rcx
	leaq	rm(%rip), %rdx
	movl	-28(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
	addl	$1, -52(%rbp)
.L10:
	movl	-52(%rbp), %eax
	cmpl	-32(%rbp), %eax
	jl	.L11
	movl	$0, -40(%rbp)
	movl	$0, -52(%rbp)
	jmp	.L12
.L14:
	movl	$0, %eax
	call	in
	testl	%eax, %eax
	je	.L13
	movl	-52(%rbp), %eax
	movl	$1, %edx
	movl	%eax, %ecx
	sall	%cl, %edx
	movl	%edx, %eax
	orl	%eax, -40(%rbp)
.L13:
	addl	$1, -52(%rbp)
.L12:
	movl	-52(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jl	.L14
	movl	$0, -52(%rbp)
	jmp	.L15
.L18:
	movl	$0, %eax
	call	in
	movl	%eax, -48(%rbp)
	jmp	.L16
.L17:
	movl	$0, %eax
	call	in
	movl	%eax, %edx
	movl	-52(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rcx
	leaq	s_sw(%rip), %rax
	movl	(%rcx,%rax), %eax
	leal	1(%rax), %ecx
	movl	-52(%rbp), %esi
	movslq	%esi, %rsi
	leaq	0(,%rsi,4), %rdi
	leaq	s_sw(%rip), %rsi
	movl	%ecx, (%rdi,%rsi)
	leal	-1(%rdx), %ecx
	movslq	%eax, %rsi
	movl	-52(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rsi, %rax
	leaq	0(,%rax,4), %rdx
	leaq	sw(%rip), %rax
	movl	%ecx, (%rdx,%rax)
.L16:
	movl	-48(%rbp), %eax
	leal	-1(%rax), %edx
	movl	%edx, -48(%rbp)
	testl	%eax, %eax
	jne	.L17
	movl	-52(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	movslq	%eax, %rsi
	movl	-52(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	salq	$2, %rax
	leaq	sw(%rip), %rdx
	addq	%rdx, %rax
	leaq	cmp(%rip), %rdx
	movq	%rdx, %rcx
	movl	$4, %edx
	movq	%rax, %rdi
	call	qsort@PLT
	addl	$1, -52(%rbp)
.L15:
	movl	-52(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jl	.L18
	movl	$3932160, %edx
	movl	$0, %esi
	leaq	used(%rip), %rax
	movq	%rax, %rdi
	call	memset@PLT
	movb	$0, q(%rip)
	movl	-40(%rbp), %eax
	movl	%eax, 4+q(%rip)
	movl	$0, top(%rip)
	movl	$1, end(%rip)
	movl	-40(%rbp), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	leaq	q(%rip), %rcx
	movq	%rcx, (%rdx,%rax)
	movl	$3, -44(%rbp)
	jmp	.L19
.L29:
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movzbl	(%rdx,%rax), %eax
	movsbl	%al, %eax
	movl	%eax, -28(%rbp)
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	4+q(%rip), %rax
	movl	(%rdx,%rax), %eax
	movl	%eax, -24(%rbp)
	movl	-36(%rbp), %eax
	subl	$1, %eax
	cmpl	%eax, -28(%rbp)
	jne	.L20
	movl	-36(%rbp), %eax
	subl	$1, %eax
	movl	$1, %edx
	movl	%eax, %ecx
	sall	%cl, %edx
	movl	%edx, %eax
	cmpl	%eax, -24(%rbp)
	jne	.L21
	movl	$1, -44(%rbp)
	jmp	.L22
.L21:
	movl	$2, -44(%rbp)
.L20:
	movl	$0, -52(%rbp)
	jmp	.L23
.L25:
	movl	-52(%rbp), %eax
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rdx
	leaq	sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	cmpl	%eax, -28(%rbp)
	je	.L24
	movl	-52(%rbp), %eax
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rdx
	leaq	sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	movl	$1, %edx
	movl	%eax, %ecx
	sall	%cl, %edx
	movl	%edx, %eax
	xorl	-24(%rbp), %eax
	movl	%eax, -40(%rbp)
	movl	-40(%rbp), %eax
	movslq	%eax, %rdx
	movl	-28(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	(%rdx,%rax), %rax
	testq	%rax, %rax
	jne	.L24
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	leaq	(%rdx,%rax), %rcx
	movl	-40(%rbp), %eax
	movslq	%eax, %rdx
	movl	-28(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	%rcx, (%rdx,%rax)
	movl	end(%rip), %eax
	movl	-28(%rbp), %edx
	movl	%edx, %ecx
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movb	%cl, (%rdx,%rax)
	movl	end(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, end(%rip)
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	4+q(%rip), %rdx
	movl	-40(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
.L24:
	addl	$1, -52(%rbp)
.L23:
	movl	-28(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_sw(%rip), %rax
	movl	(%rdx,%rax), %eax
	cmpl	%eax, -52(%rbp)
	jl	.L25
	movl	$0, -52(%rbp)
	jmp	.L26
.L28:
	movl	-52(%rbp), %eax
	movslq	%eax, %rcx
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	salq	$4, %rax
	subq	%rdx, %rax
	addq	%rcx, %rax
	leaq	0(,%rax,4), %rdx
	leaq	rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	movl	%eax, -20(%rbp)
	movl	-20(%rbp), %eax
	movl	-24(%rbp), %edx
	movl	%eax, %ecx
	sarl	%cl, %edx
	movl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L27
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movl	-20(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	(%rdx,%rax), %rax
	testq	%rax, %rax
	jne	.L27
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	leaq	(%rdx,%rax), %rcx
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movl	-20(%rbp), %eax
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	%rcx, (%rdx,%rax)
	movl	end(%rip), %eax
	movl	-20(%rbp), %edx
	movl	%edx, %ecx
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movb	%cl, (%rdx,%rax)
	movl	end(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, end(%rip)
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	4+q(%rip), %rdx
	movl	-24(%rbp), %eax
	movl	%eax, (%rcx,%rdx)
.L27:
	addl	$1, -52(%rbp)
.L26:
	movl	-28(%rbp), %eax
	cltq
	leaq	0(,%rax,4), %rdx
	leaq	s_rm(%rip), %rax
	movl	(%rdx,%rax), %eax
	cmpl	%eax, -52(%rbp)
	jl	.L28
	movl	top(%rip), %eax
	addl	$1, %eax
	movl	%eax, top(%rip)
.L19:
	movl	top(%rip), %edx
	movl	end(%rip), %eax
	cmpl	%eax, %edx
	jl	.L29
.L22:
	cmpl	$1, -44(%rbp)
	jle	.L30
	movl	-44(%rbp), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	msg(%rip), %rax
	movq	(%rdx,%rax), %rax
	movq	%rax, %rdi
	call	puts@PLT
	jmp	.L9
.L30:
	movl	top(%rip), %eax
	cltq
	leaq	0(,%rax,8), %rdx
	leaq	q(%rip), %rax
	movq	(%rdx,%rax), %rax
	movq	%rax, -16(%rbp)
	movl	$0, sz(%rip)
.L40:
	movzbl	-16(%rbp), %eax
	movsbl	%al, %eax
	movl	-12(%rbp), %edx
	movslq	%edx, %rdx
	cltq
	salq	$15, %rax
	addq	%rdx, %rax
	leaq	0(,%rax,8), %rdx
	leaq	used(%rip), %rax
	movq	(%rdx,%rax), %rax
	movq	(%rax), %rax
	movq	%rax, -8(%rbp)
	movzbl	-8(%rbp), %edx
	movzbl	-16(%rbp), %eax
	cmpb	%al, %dl
	jne	.L31
	movl	-4(%rbp), %edx
	movl	-12(%rbp), %eax
	cmpl	%eax, %edx
	jne	.L31
	movl	sz(%rip), %edx
	movl	-44(%rbp), %eax
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	msg(%rip), %rax
	movq	(%rcx,%rax), %rax
	movl	%edx, %esi
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	jmp	.L32
.L31:
	movzbl	-16(%rbp), %edx
	movzbl	-8(%rbp), %eax
	cmpb	%al, %dl
	je	.L33
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	res(%rip), %rax
	movb	$4, (%rdx,%rax)
	movl	sz(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, sz(%rip)
	movzbl	-16(%rbp), %edx
	cltq
	leaq	(%rax,%rax), %rcx
	leaq	1+res(%rip), %rax
	movb	%dl, (%rcx,%rax)
	jmp	.L34
.L33:
	movl	$0, -52(%rbp)
	jmp	.L35
.L39:
	movl	-12(%rbp), %edx
	movl	-4(%rbp), %eax
	xorl	%eax, %edx
	movl	-52(%rbp), %eax
	movl	%eax, %ecx
	sarl	%cl, %edx
	movl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L36
	movl	-12(%rbp), %edx
	movl	-52(%rbp), %eax
	movl	%eax, %ecx
	sarl	%cl, %edx
	movl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L37
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	res(%rip), %rax
	movb	$5, (%rdx,%rax)
	jmp	.L38
.L37:
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	res(%rip), %rax
	movb	$6, (%rdx,%rax)
.L38:
	movl	sz(%rip), %eax
	leal	1(%rax), %edx
	movl	%edx, sz(%rip)
	movl	-52(%rbp), %edx
	movl	%edx, %ecx
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	1+res(%rip), %rax
	movb	%cl, (%rdx,%rax)
	jmp	.L34
.L36:
	addl	$1, -52(%rbp)
.L35:
	movl	-52(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jl	.L39
.L34:
	movq	-8(%rbp), %rax
	movq	%rax, -16(%rbp)
	jmp	.L40
.L41:
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rdx
	leaq	1+res(%rip), %rax
	movzbl	(%rdx,%rax), %eax
	movsbl	%al, %eax
	leal	1(%rax), %edx
	movl	sz(%rip), %eax
	cltq
	leaq	(%rax,%rax), %rcx
	leaq	res(%rip), %rax
	movzbl	(%rcx,%rax), %eax
	movsbl	%al, %eax
	cltq
	leaq	0(,%rax,8), %rcx
	leaq	msg(%rip), %rax
	movq	(%rcx,%rax), %rax
	movl	%edx, %esi
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L32:
	movl	sz(%rip), %eax
	leal	-1(%rax), %edx
	movl	%edx, sz(%rip)
	testl	%eax, %eax
	jne	.L41
.L9:
	movl	$0, %eax
	call	in
	movl	%eax, -36(%rbp)
	cmpl	$0, -36(%rbp)
	jne	.L42
	movl	$0, %eax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
