input: Write a python function to create, compile, and fit a convolutional neural network model using given training and testing data, then plot the training and validation accuracy.
  assert create_and_fit_cnn_model(X_train, y_train, X_test, y_test, epochs=5, batch_size=32) is None
output: def create_and_fit_cnn_model(X_train, y_train, X_test, y_test, epochs=5, batch_size=32):
      import matplotlib.pyplot as plt
      from keras.models import Sequential
      from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
      from keras.utils import to_categorical
      
      # Assuming y_train and y_test need to be one-hot encoded
      y_train = to_categorical(y_train)
      y_test = to_categorical(y_test)
      
      # Create the CNN model
      model = Sequential()
      model.add(Conv2D(32, (3, 3), activation='relu', input_shape=X_train.shape[1:]))
      model.add(MaxPooling2D((2, 2)))
      model.add(Conv2D(64, (3, 3), activation='relu'))
      model.add(MaxPooling2D((2, 2)))
      model.add(Flatten())
      model.add(Dense(64, activation='relu'))
      model.add(Dense(y_train.shape[1], activation='softmax'))
      
      # Compile the model
      model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
      
      # Fit the model
      history = model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=(X_test, y_test))
      
      # Plot training & validation accuracy values
      plt.plot(history.history['accuracy'])
      plt.plot(history.history['val_accuracy'])
      plt.title('Model accuracy')
      plt.ylabel('Accuracy')
      plt.xlabel('Epoch')
      plt.legend(['Train', 'Validation'], loc='upper left')
      plt.show()