// File: bowbowbow[P]CollaborativeFiltering/recommender.cpp
// Function: InputReader::parse()
void parse() {
        int maxUser = 0, maxItem = 0;
        
        int user, item, rating, timeStamp;
        while(!fin.eof()) {
            fin >> user >> item >> rating >> timeStamp;
            
            input.push_back({user, item, rating});
            
            maxUser = max(maxUser, user);
            maxItem = max(maxItem, item);
        }
        input.pop_back();
        
        userToItem = vector<vector<double> > (maxUser+1, vector<double> (maxItem+1, EMPTY));
        for(int i=0;i<input.size();i++) {
            user = input[i].user, item = input[i].item, rating = input[i].rating;
            userToItem[user][item]= rating;
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x90(%rbp)
movl $0x0, -0xc(%rbp)
movl $0x0, -0x10(%rbp)
movq -0x90(%rbp), %rdi
movq (%rdi), %rax
addq -0x18(%rax), %rdi
callq 0x2270
xorb $-0x1, %al
testb $0x1, %al
jne 0x32f6
jmp 0x337c
movq -0x90(%rbp), %rdi
leaq -0x14(%rbp), %rsi
callq 0x20d0
movq %rax, %rdi
leaq -0x18(%rbp), %rsi
callq 0x20d0
movq %rax, %rdi
leaq -0x1c(%rbp), %rsi
callq 0x20d0
movq %rax, %rdi
leaq -0x20(%rbp), %rsi
callq 0x20d0
movq -0x90(%rbp), %rdi
addq $0x220, %rdi            # imm = 0x220
movl -0x14(%rbp), %eax
movl %eax, -0x2c(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x28(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x24(%rbp)
leaq -0x2c(%rbp), %rsi
callq 0x36a0
leaq -0xc(%rbp), %rdi
leaq -0x14(%rbp), %rsi
callq 0x36d0
movl (%rax), %eax
movl %eax, -0xc(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0x36d0
movl (%rax), %eax
movl %eax, -0x10(%rbp)
jmp 0x32d8
movq -0x90(%rbp), %rdi
addq $0x220, %rdi            # imm = 0x220
callq 0x3710
movl -0xc(%rbp), %eax
incl %eax
cltq
movq %rax, -0xa8(%rbp)
movl -0x10(%rbp), %eax
incl %eax
cltq
movq %rax, -0xa0(%rbp)
movabsq $-0x4000000000000000, %rax # imm = 0xC000000000000000
movq %rax, -0x68(%rbp)
leaq -0x69(%rbp), %rdi
movq %rdi, -0x98(%rbp)
callq 0x3740
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rcx
leaq -0x60(%rbp), %rdi
leaq -0x68(%rbp), %rdx
callq 0x3760
jmp 0x33e6
leaq -0x7d(%rbp), %rdi
movq %rdi, -0xb0(%rbp)
callq 0x37e0
movq -0xa8(%rbp), %rsi
movq -0xb0(%rbp), %rcx
leaq -0x48(%rbp), %rdi
leaq -0x60(%rbp), %rdx
callq 0x3800
jmp 0x3413
movq -0x90(%rbp), %rdi
addq $0x208, %rdi            # imm = 0x208
leaq -0x48(%rbp), %rsi
callq 0x3880
leaq -0x48(%rbp), %rdi
callq 0x2d40
leaq -0x7d(%rbp), %rdi
callq 0x38b0
leaq -0x60(%rbp), %rdi
callq 0x38d0
leaq -0x69(%rbp), %rdi
callq 0x3930
movl $0x0, -0x84(%rbp)
movq -0x90(%rbp), %rdi
movslq -0x84(%rbp), %rax
movq %rax, -0xb8(%rbp)
addq $0x220, %rdi            # imm = 0x220
callq 0x2f30
movq %rax, %rcx
movq -0xb8(%rbp), %rax
cmpq %rcx, %rax
jae 0x3572
movq -0x90(%rbp), %rdi
addq $0x220, %rdi            # imm = 0x220
movslq -0x84(%rbp), %rsi
callq 0x2f60
movq -0x90(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x14(%rbp)
addq $0x220, %rdi            # imm = 0x220
movslq -0x84(%rbp), %rsi
callq 0x2f60
movq -0x90(%rbp), %rdi
movl 0x4(%rax), %eax
movl %eax, -0x18(%rbp)
addq $0x220, %rdi            # imm = 0x220
movslq -0x84(%rbp), %rsi
callq 0x2f60
movq -0x90(%rbp), %rdi
movl 0x8(%rax), %eax
movl %eax, -0x1c(%rbp)
cvtsi2sdl -0x1c(%rbp), %xmm0
movsd %xmm0, -0xc0(%rbp)
addq $0x208, %rdi            # imm = 0x208
movslq -0x14(%rbp), %rsi
callq 0x3950
movq %rax, %rdi
movslq -0x18(%rbp), %rsi
callq 0x3970
movsd -0xc0(%rbp), %xmm0
movsd %xmm0, (%rax)
movl -0x84(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x84(%rbp)
jmp 0x3458
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x3567
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x7d(%rbp), %rdi
callq 0x38b0
leaq -0x60(%rbp), %rdi
callq 0x38d0
leaq -0x69(%rbp), %rdi
callq 0x3930
jmp 0x357b
addq $0xc0, %rsp
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0x2250
nopw %cs:(%rax,%rax)
nop