user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %r15
  lea    D42(%rip),%rdi
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  lea    D3(%rip),%rbp
  push   %rbx
  sub    $0x228,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x218(%rsp)
  xor    %eax,%eax
  call   <puts@plt>
  lea    0x1c(%rsp),%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  lea    D39(%rip),%rdi
  call   <puts@plt>
  mov    0x1c(%rsp),%edi
  test   %edi,%edi
  jle    L155
  lea    0x80(%rsp),%rax
  xor    %r13d,%r13d
  xor    %r12d,%r12d
  mov    %rax,0x8(%rsp)
  lea    D24(%rip),%r14
  nopw   0x0(%rax,%rax,1)
L40:
  add    $0x1,%r12d
  mov    %r14,%rdi
  xor    %eax,%eax
  mov    %r12d,%esi
  call   <printf@plt>
  mov    0x1c(%rsp),%esi
  test   %esi,%esi
  jle    L155
  mov    0x8(%rsp),%rax
  xor    %ebx,%ebx
  lea    (%rax,%r13,4),%r15
  nopl   0x0(%rax,%rax,1)
L132:
  mov    %r15,%rsi
  mov    %rbp,%rdi
  add    $0x1,%ebx
  add    $0x4,%r15
  call   <scanf@plt>
  mov    0x1c(%rsp),%eax
  cmp    %ebx,%eax
  jg     L132
  add    $0xa,%r13
  cmp    %eax,%r12d
  jl     L40
  test   %eax,%eax
  jle    L155
  lea    0x0(,%rax,4),%r12
  lea    0x20(%rsp),%rbp
  xor    %esi,%esi
  mov    %r12,%rdx
  mov    %rbp,%rdi
  lea    -0x1(%rax),%ebx
  call   <memset@plt>
  lea    0x50(%rsp),%rdi
  mov    %r12,%rdx
  xor    %esi,%esi
  call   <memset@plt>
  lea    0x0(,%rbx,4),%rdx
  mov    $0xffffffffffffffd8,%rsi
  lea    (%rdx,%rbx,1),%rax
  lea    0x24(%rsp,%rdx,1),%rdi
  shl    $0x3,%rax
  lea    0xa8(%rsp,%rax,1),%rcx
  sub    %rax,%rsi
  xchg   %ax,%ax
L137:
  mov    0x0(%rbp),%edx
  lea    (%rsi,%rcx,1),%rax
  nopw   0x0(%rax,%rax,1)
L15:
  add    (%rax),%edx
  add    $0x28,%rax
  cmp    %rcx,%rax
  jne    L15
  mov    %edx,0x0(%rbp)
  add    $0x4,%rbp
  add    $0x4,%rcx
  cmp    %rdi,%rbp
  jne    L137
L155:
  lea    D22(%rip),%rdi
  xor    %eax,%eax
  lea    0x20(%rsp),%rbp
  xor    %r12d,%r12d
  call   <printf@plt>
  mov    0x1c(%rsp),%eax
  lea    D20(%rip),%r13
  test   %eax,%eax
  jle    L115
L168:
  mov    %rbp,%rbx
  xor    %r14d,%r14d
  cs nopw 0x0(%rax,%rax,1)
L143:
  mov    (%rbx),%ecx
  lea    0x1(%r14),%esi
  test   %ecx,%ecx
  jne    L78
  mov    0x50(%rsp,%r14,4),%edx
  test   %edx,%edx
  je     L6
L78:
  mov    0x1c(%rsp),%ecx
  test   %ecx,%ecx
  jle    L90
  lea    -0x1(%rcx),%edx
  lea    0x80(%rsp,%r14,4),%rax
  lea    (%rdx,%rdx,4),%rdx
  lea    (%r14,%rdx,2),%rdx
  lea    0xa8(%rsp,%rdx,4),%rdx
  cs nopw 0x0(%rax,%rax,1)
L43:
  cmpl   $0x1,(%rax)
  jne    L0
  subl   $0x1,(%rbx)
L0:
  add    $0x28,%rax
  cmp    %rax,%rdx
  jne    L43
  add    $0x1,%r14
  add    $0x4,%rbx
  cmp    %r14d,%ecx
  jg     L143
  xchg   %ax,%ax
L90:
  add    $0x1,%r12d
  cmp    %ecx,%r12d
  jl     L168
L115:
  mov    0x218(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  add    $0x228,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L6:
  mov    %r13,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x50(%rsp),%rax
  movl   $0x1,(%rax,%r14,4)
  jmp    L78
L4:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D42
type_guessed: string
name: parse_data
arguments: data_tag: D3
type_guessed: string
name: parse_data
arguments: data_tag: D39
type_guessed: string
name: parse_data
arguments: data_tag: D24
type_guessed: string
name: parse_data
arguments: data_tag: D22
type_guessed: string
name: parse_data
arguments: data_tag: D20
type_guessed: string

tool: D42: Enter the no of vertices:

tool: D3: %d

tool: D39: Enter the adjacency matrix:

tool: D24: Enter row %d


tool: D22: 
The topological order is:

tool: D20: %d 

assistant: ```c
int main() {
  int i, j, k, n, a[10][10], indeg[10], flag[10], count = 0;
  printf("Enter the no of vertices:\n");
  scanf("%d", &n);
  printf("Enter the adjacency matrix:\n");
  for (i = 0; i < n; i++) {
    printf("Enter row %d\n", i + 1);
    for (j = 0; j < n; j++)
      scanf("%d", &a[i][j]);
  }
  for (i = 0; i < n; i++) {
    indeg[i] = 0;
    flag[i] = 0;
  }
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
      indeg[i] = indeg[i] + a[j][i];
  printf("\nThe topological order is:");
  while (count < n) {
    for (k = 0; k < n; k++) {
      if ((indeg[k] == 0) && (flag[k] == 0)) {
        printf("%d ", (k + 1));
        flag[k] = 1;
      }
      for (i = 0; i < n; i++) {
        if (a[i][k] == 1)
          indeg[k]--;
      }
    }
    count++;
  }
  return 0;
}
```