input: def recognize_handwritten_digits(X_train: np.ndarray, y_train: np.ndarray, X_test: np.ndarray, y_test: np.ndarray) -> Model:
      """
      Build and train a neural network model to recognize handwritten digits from the MNIST dataset.
      The model consists of an input layer, a hidden layer with 64 units and ReLU activation, a dropout layer, 
      and an output layer with 10 units and softmax activation. The model is compiled with categorical crossentropy
      loss, Adam optimizer, and accuracy as the metric. The input data is reshaped, normalized, and one-hot encoded
      before training.
  
      >>> (X_train_sample, y_train_sample), (X_test_sample, y_test_sample) = mnist.load_data()
      >>> model = recognize_handwritten_digits(X_train_sample, y_train_sample, X_test_sample, y_test_sample)
      >>> model.evaluate(X_test_sample, to_categorical(y_test_sample, num_classes=10))
      [0.05, 0.98]
      """
output:     
      X_train = X_train.reshape(-1, 28*28) / 255.0
      X_test = X_test.reshape(-1, 28*28) / 255.0
      y_train = to_categorical(y_train, num_classes=10)
      y_test = to_categorical(y_test, num_classes=10)
  
      model = Sequential([
          Dense(64, activation='relu', input_shape=(28*28,)),
          Dropout(0.2),
          Dense(10, activation='softmax')
      ])
  
      model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
      model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))
  
      return model
  