Rating:

### Solution
Just run this code and wait a little bit :)

```python
from pwn import *
from sudoku import Sudoku
import re

def remake(lines):
newGrid = []
for line in lines:
newLine = []
for symb in line:
if symb != "_":
newLine.append(int(symb))
else:
newLine.append(0)
newGrid.append(newLine)
return newGrid

def interact_with_server(host, port, num_puzzles=300):
r = remote(host, port)

try:
for puzzle_num in range(num_puzzles):
print(f"doing sudoku #{puzzle_num + 1}/{num_puzzles}")
if puzzle_num == 300:
r.interactive()

# waiting for ">>"
r.recvuntil(b">>")

# receive 9 lines of sudoku
lines = []
for _ in range(10):
line = r.recvline().decode().strip()
if "Codefest" in line:
print(line)
lines.append(re.split(r'\s+', line))

del lines[0] # delete an empty line

print("received sudoku:")
for line in lines:
print(" ".join(line))

grid = remake(lines)
puzzle = Sudoku(3, 3, board=grid)

solved = puzzle.solve()
solved_board = solved.board

if solved_board:
print("\nsolution:")
for row in solved_board:
print(" ".join(map(str, row)))

solution_lines = [" ".join(map(str, row)).encode() for row in solved_board]
r.sendline(b"\n".join(solution_lines))

# if we solved all sudokus we need to switch to interactive mode to catch the flag from console
if puzzle_num == num_puzzles:
r.interactive()

r.recvuntil(">> Input Answer:\n")
response = r.recvline().decode().strip()
print(response)
else:
print("failed to solve sudoku.")

except EOFError:
print("an error occured.")

finally:
r.close()

if __name__ == "__main__":
host = "codefest-ctf.iitbhu.tech"
port = 15397
interact_with_server(host, port, num_puzzles=300)
```