System: affiche juste le code, pas d'explications !
User: 
Tu es un développeur python3 expérimenté, et tu dois concevoir un programme en python (avec des commentaires en français, sans utiliser de librairies externes, sans `if __name__=="__main__":`, avec type hints, et en privilégiant les algorythmes a complexité constante (O(1)) et/ou complexité linéaire (O(n))).
Le programme va recevoir les données en entrée sur la stdin, et doit répondre sur la stdout.
Fabrique moi un programme python qui résout le problème (énoncé en markdown) suivant :
-----------------------------------------------------
# Espace expo

The centerpiece of the exhibition will be a huge sculpture depicting video game characters, and you want to find an optimal location for it in the middle of the input hall.

Its footprint takes the form of a NxM mètres rectangle, and you want to leave an empty space all around so that people can circulate and admire it from all angles.

Using the hall plan, determine a suitable location for the statue.

## Data

### Input

**Line 1**: four integers N, M, L and H: the width (N) and height (M) of the statue, and the width (L) and height (H) of the piece.

**H following lines**: H strings of characters, each of length L. They represent a rectangle corresponding to the floor plan of the room: a "#" character corresponds to a wall and a "." corresponds to a free space. Boxes outside the grid are considered walls.

### Output

The floor plan, updated with "x" characters at the location you suggest for the statue.

## Example

Input:
```plaintext
3 2 8 6
......#.
.####...
........
.......#
#.......
.......#

```

One possible solution would be:
```plaintext
......#.
.####...
........
...xxx.#
#..xxx..
.......#
```

In fact, all the squares in this location and the surrounding squares (including the diagonal ones) are free. Another solution is to move the statue one square to the left.

## Constraints

L and H are between 3 and 100.

It's guaranteed that at least one valid solution will always exist. If several solutions exist, you can display any of them.
Assistant: '''python
# Fonction pour placer la statue dans le plan de la salle
def placer_statue(N: int, M: int, L: int, H: int, plan: list[str]) -> list[str]:
    # On parcourt chaque position possible pour placer la statue
    for i in range(H - M + 1):
        for j in range(L - N + 1):
            # Vérification de l'espace autour de la statue
            espace_libre = True
            for di in range(-1, M + 1):
                for dj in range(-1, N + 1):
                    if (0 <= i + di < H) and (0 <= j + dj < L):
                        if plan[i + di][j + dj] == '#':
                            espace_libre = False
                            break
                if not espace_libre:
                    break
            if espace_libre:
                # Création d'une nouvelle version du plan avec la statue
                nouveau_plan = [list(ligne) for ligne in plan]
                for di in range(M):
                    for dj in range(N):
                        nouveau_plan[i + di][j + dj] = 'x'
                return [''.join(ligne) for ligne in nouveau_plan]
    return plan  # Au cas où aucune position n'est trouvée, ce qui ne devrait pas arriver

# Lecture des données d'entrée
import sys
input = sys.stdin.read
data = input().splitlines()

# Extraction des dimensions et du plan
N, M, L, H = map(int, data[0].split())
plan = data[1:H + 1]

# Appel de la fonction pour placer la statue
resultat = placer_statue(N, M, L, H, plan)

# Affichage du résultat
for ligne in resultat:
    print(ligne)'''
User: Avec l'input:
```3 2 8 6
......#.
.####...
........
.......#
#.......
.......#```
Je m'attendais à obtenir:
```......#.
.####...
........
...xxx.#
#..xxx..
.......#```
Mais j'ai obtenu:
```......#.
.####...
........
..xxx..#
#.xxx...
.......#```, ce qui n'est pas le résultat attendu !
Assistant: