If you look closely at the forward function, there is only one ReLU layer (self.relu). But it is used three times. This can be done, because ReLU layers do not learn any parameters as opposed to convolution or batch normalization layers.
To answer your question: Using print only prints the module in question and all of its submodules (which will print their submodules etc.). It does not print the “structure” or the forward function. And the modules might even be printed in another order as they are used in the forward pass (depending on the order of definition in the module constructor).