input: def build_cat_dog_model() -> Sequential:
      """Build and return a Sequential Keras model that distinguishes between cats and dogs using 
      convolutional layers. The model should include dropout for regularization and use binary 
      crossentropy loss with the Adam optimizer.
      >>> model = build_cat_dog_model()
      >>> model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
      >>> model.summary()
      Model: "sequential"
      _________________________________________________________________
      Layer (type)                 Output Shape              Param #   
      =================================================================
      conv2d (Conv2D)              (None, 62, 62, 32)        896       
      _________________________________________________________________
      max_pooling2d (MaxPooling2D) (None, 31, 31, 32)        0         
      _________________________________________________________________
      dropout (Dropout)            (None, 31, 31, 32)        0         
      _________________________________________________________________
      conv2d_1 (Conv2D)            (None, 29, 29, 64)        18496     
      _________________________________________________________________
      max_pooling2d_1 (MaxPooling2 (None, 14, 14, 64)        0         
      _________________________________________________________________
      dropout_1 (Dropout)          (None, 14, 14, 64)        0         
      _________________________________________________________________
      conv2d_2 (Conv2D)            (None, 12, 12, 64)        36928     
      _________________________________________________________________
      max_pooling2d_2 (MaxPooling2 (None, 6, 6, 64)          0         
      _________________________________________________________________
      dropout_2 (Dropout)          (None, 6, 6, 64)          0         
      _________________________________________________________________
      flatten (Flatten)            (None, 2304)              0         
      _________________________________________________________________
      dense (Dense)                (None, 128)               295040    
      _________________________________________________________________
      dense_1 (Dense)              (None, 1)                 129       
      =================================================================
      Total params: 351,489
      Trainable params: 351,489
      Non-trainable params: 0
      _________________________________________________________________
      """
      import numpy as np
      import keras
      from keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Flatten
      from keras.models import Sequential
      from keras.preprocessing.image import ImageDataGenerator
  
      # Create the neural network model
      model = Sequential()
  
      # Input layer
      model.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
  
      # Hidden layers
      model.add(MaxPooling2D(pool_size = (2, 2)))
      model.add(Dropout(0.3))
      model.add(Conv2D(64, (3, 3), activation = 'relu'))
      model.add(MaxPooling2D(pool_size = (2, 2)))
      model.add(Dropout(0.3))
      model.add(Conv2D(64, (3, 3), activation = 'relu'))
      model.add(MaxPooling2D(pool_size = (2, 2)))
      model.add(Dropout(0.3))
  
      # Output layer
      model.add(Flatten())
      model.add(Dense(units = 128, activation = 'relu'))
      model.add(Dense(units = 1, activation = 'sigmoid'))
  
      return model
output:     return model