<｜begin▁of▁sentence｜>### Instruction:
Picture this scenario: We're setting up a digital communication network to coordinate two separate emergency response teams, Alpha and Bravo, each consisting of 15 paramedics. For effective collaboration, we're relying on a system that mirrors a social network where each team member could potentially be linked to another. 

Now, within each group – Alpha and Alpha, or Bravo and Bravo – there's a 50% chance that any two team members will be in direct communication. But for members across teams, Alpha to Bravo or vice versa, that chance drops to 10%. We've modeled this setup using what's known as a stochastic block model.

Imagine this communication network as a series of pathways on a map that our EMTs can use to stay connected. Our challenge is to determine the number of isolated clusters, or groups of EMTs that are self-contained and have no direct pathways leading out to EMTs outside their cluster, in this simulation.

To translate this into the language we need: How many isolated communication groups, or "connected components", would we have in our virtual map of EMT contacts under these conditions? This helps us understand how well-integrated our emergency response communication network might be. The modeling of this network is done through the 'networkx' API.
### Response:
import numpy as np
import networkx as nx
from graspologic.simulations import sbm

np.random.seed(2)
# Define the size of the two blocks
n = [15, 15]
# Define the connection probabilities
p = [[0.5, 0.1], [0.1, 0.5]]
# Generate an SBM graph
adjacency, labels = sbm(n, p, return_labels=True)
# Convert the adjacency matrix to a NetworkX graph
G = nx.from_numpy_array(adjacency)
# Use NetworkX to find the number of connected components
num_connected_components = nx.number_connected_components(G.to_undirected())
print('Number of connected components:', num_connected_components)
<|EOT|>
