// File: c2-d2[P]disty/src/main.cpp
// Function: void print_distance_matrix<std::vector<std::vector<int, std::allocator<int>>, std::allocator<std::vector<int, std::allocator<int>>>>, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>(std::vector<std::vector<int, std::allocator<int>>, std::allocator<std::vector<int, std::allocator<int>>>> const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&)
void print_distance_matrix(const T &distance_matrix, const U &names){
    assert(distance_matrix.size() == distance_matrix[0].size());
    assert(distance_matrix.size() == names.size());
    int count=static_cast<int>(distance_matrix.size());

    //cout << "";
    for (const string& name : names){
        cout << "\t" << name;
    }
    cout << endl;

    for (int i=0;i<count;i++){
        cout << names[i];
        for (int j=0;j<count;j++){
            cout << "\t" << distance_matrix[i][j];
        }
        cout << endl;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
callq 0x7b40
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x7c80
movq %rax, %rdi
callq 0x7610
movq %rax, %rcx
movq -0x48(%rbp), %rax
cmpq %rcx, %rax
jne 0x5430
jmp 0x544f
leaq 0x3782(%rip), %rdi      # 0x8bb9
leaq 0x3190(%rip), %rsi      # 0x85ce
movl $0x1f1, %edx            # imm = 0x1F1
leaq 0x37a3(%rip), %rcx      # 0x8bed
callq 0x2110
movq -0x8(%rbp), %rdi
callq 0x7b40
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rdi
callq 0x4550
movq %rax, %rcx
movq -0x50(%rbp), %rax
cmpq %rcx, %rax
jne 0x5473
jmp 0x5492
leaq 0x37f2(%rip), %rdi      # 0x8c6c
leaq 0x314d(%rip), %rsi      # 0x85ce
movl $0x1f2, %edx            # imm = 0x1F2
leaq 0x3760(%rip), %rcx      # 0x8bed
callq 0x2110
movq -0x8(%rbp), %rdi
callq 0x7b40
movl %eax, -0x14(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
callq 0x7b70
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
callq 0x7ba0
movq %rax, -0x30(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x7bd0
testb $0x1, %al
jne 0x54d3
jmp 0x550a
leaq -0x28(%rbp), %rdi
callq 0x7c10
movq %rax, -0x38(%rbp)
movq 0x7ae1(%rip), %rdi      # 0xcfc8
leaq 0x3185(%rip), %rsi      # 0x8673
callq 0x21d0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
callq 0x21c0
leaq -0x28(%rbp), %rdi
callq 0x7c30
jmp 0x54c0
movq 0x7ab7(%rip), %rdi      # 0xcfc8
movq 0x7a90(%rip), %rsi      # 0xcfa8
callq 0x2210
movl $0x0, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0x55c2
movq -0x10(%rbp), %rdi
movslq -0x3c(%rbp), %rsi
callq 0x7b20
movq %rax, %rsi
movq 0x7a81(%rip), %rdi      # 0xcfc8
callq 0x21c0
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0x55a1
movq 0x7a66(%rip), %rdi      # 0xcfc8
leaq 0x310a(%rip), %rsi      # 0x8673
callq 0x21d0
movq %rax, -0x58(%rbp)
movq -0x8(%rbp), %rdi
movslq -0x3c(%rbp), %rsi
callq 0x7c80
movq %rax, %rdi
movslq -0x40(%rbp), %rsi
callq 0x7ca0
movq -0x58(%rbp), %rdi
movl (%rax), %esi
callq 0x2360
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0x5553
movq 0x7a20(%rip), %rdi      # 0xcfc8
movq 0x79f9(%rip), %rsi      # 0xcfa8
callq 0x2210
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x5524
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax,%rax)