<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def split(mesh, only_watertight=True, adjacency=None, engine=None):
 """ Split a mesh into multiple meshes from face connectivity. If only_watertight is true, it will only return watertight meshes and will attempt single triangle/quad repairs. Parameters mesh: Trimesh only_watertight: if True, only return watertight components adjacency: (n,2) list of face adjacency to override using the plain adjacency calculated automatically. engine: str, which engine to use. ('networkx', 'scipy', or 'graphtool') Returns meshes: list of Trimesh objects """


    if adjacency is None:
        adjacency = mesh.face_adjacency

    # if only watertight the shortest thing we can split has 3 triangles
    if only_watertight:
        min_len = 3
    else:
        min_len = 1

    components = connected_components(edges=adjacency,
                                      nodes=np.arange(len(mesh.faces)),
                                      min_len=min_len,
                                      engine=engine)
    meshes = mesh.submesh(components,
                          only_watertight=only_watertight)
    return meshes