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

```asm
<nqueen_solver1>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x240,%rsp
  mov    %edi,-0x234(%rbp)
  mov    %esi,-0x238(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x218(%rbp)
  movl   $0x0,-0x228(%rbp)
  mov    -0x238(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  or     $0x1,%eax
  mov    %eax,-0x210(%rbp)
  mov    -0x238(%rbp),%eax
  add    $0x1,%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  or     $0x4,%eax
  mov    %eax,-0x190(%rbp)
  mov    -0x238(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  sar    %eax
  mov    %eax,-0x110(%rbp)
  mov    -0x210(%rbp),%edx
  mov    -0x190(%rbp),%eax
  or     %eax,%edx
  mov    -0x110(%rbp),%eax
  or     %edx,%eax
  mov    %eax,-0x90(%rbp)
  mov    -0x234(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x224(%rbp)
  jmp    L0
L10:
  mov    -0x228(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%edx
  mov    -0x228(%rbp),%eax
  add    $0x2,%eax
  cmp    %eax,-0x238(%rbp)
  jle    L79
  mov    $0x2,%eax
  jmp    L14
L79:
  mov    $0x0,%eax
L14:
  or     %edx,%eax
  mov    %eax,-0x220(%rbp)
  mov    -0x220(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x220(%rbp),%eax
  not    %eax
  and    %edx,%eax
  mov    %eax,-0x21c(%rbp)
  mov    -0x21c(%rbp),%eax
  and    -0x224(%rbp),%eax
  test   %eax,%eax
  je     L62
  mov    -0x234(%rbp),%eax
  sub    $0x3,%eax
  cmp    %eax,-0x228(%rbp)
  jne    L35
  addq   $0x1,-0x218(%rbp)
  subl   $0x1,-0x228(%rbp)
  jmp    L0
L35:
  mov    -0x228(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  or     -0x21c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x228(%rbp),%eax
  cltq
  mov    %edx,-0x90(%rbp,%rax,4)
  mov    -0x228(%rbp),%eax
  cltq
  mov    -0x210(%rbp,%rax,4),%eax
  mov    -0x228(%rbp),%edx
  lea    0x1(%rdx),%ecx
  or     -0x21c(%rbp),%eax
  mov    %eax,%edx
  movslq %ecx,%rax
  mov    %edx,-0x210(%rbp,%rax,4)
  mov    -0x228(%rbp),%eax
  cltq
  mov    -0x190(%rbp,%rax,4),%eax
  or     -0x21c(%rbp),%eax
  mov    -0x228(%rbp),%edx
  lea    0x1(%rdx),%ecx
  lea    (%rax,%rax,1),%edx
  movslq %ecx,%rax
  mov    %edx,-0x190(%rbp,%rax,4)
  mov    -0x228(%rbp),%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  or     -0x21c(%rbp),%eax
  mov    -0x228(%rbp),%edx
  lea    0x1(%rdx),%ecx
  shr    %eax
  mov    %eax,%edx
  movslq %ecx,%rax
  mov    %edx,-0x110(%rbp,%rax,4)
  mov    -0x228(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x210(%rbp,%rax,4),%edx
  mov    -0x228(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x190(%rbp,%rax,4),%eax
  mov    %edx,%ecx
  or     %eax,%ecx
  mov    -0x228(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%edx
  mov    -0x228(%rbp),%eax
  add    $0x1,%eax
  or     %ecx,%edx
  cltq
  mov    %edx,-0x90(%rbp,%rax,4)
  addl   $0x1,-0x228(%rbp)
  jmp    L0
L62:
  subl   $0x1,-0x228(%rbp)
L0:
  cmpl   $0x0,-0x228(%rbp)
  jns    L10
  mov    -0x218(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L60
  call   <__stack_chk_fail@plt>
L60:
  leave
  ret
```

assistant: ```c
long long nqueen_solver1(int size, int idx) {
  unsigned int masks[32];
  unsigned int left_masks[32];
  unsigned int right_masks[32];
  unsigned int ms[32];
  unsigned int ns;
  long long solutions = 0;
  int i = 0;
  masks[0] = 1 | 1 << idx;
  left_masks[0] = (1 << 2) | (1 << (idx + 1));
  right_masks[0] = (1 << idx) >> 1;
  ms[0] = masks[0] | left_masks[0] | right_masks[0];
  unsigned int board_mask = (1 << size) - 1;
  while (i >= 0) {
    unsigned int m = ms[i] | ((i + 2) < idx ? 2 : 0);
    ns = (m + 1) & ~m;
    if ((ns & board_mask) != 0) {
      if (i == size - 3) {
        solutions++;
        i--;
      } else {
        ms[i] |= ns;
        masks[i + 1] = masks[i] | ns;
        left_masks[i + 1] = (left_masks[i] | ns) << 1;
        right_masks[i + 1] = (right_masks[i] | ns) >> 1;
        ms[i + 1] = masks[i + 1] | left_masks[i + 1] | right_masks[i + 1];
        i++;
      }
    } else {
      i--;
    }
  }
  return solutions;
}
```