How to Integrate Bi-LSTM with 2D-CONV and 2d-Max Pooling

I want to apply this paper : Text Classification Improved by Integrating Bidirectional LSTM with Two-dimensional Max Pooling; for multi-class text classification problem (news classification). But I don’t know how to create the architecture.

please if you know how to build it I will be so pleasure to see how.
Any help or advice will appreciated.

Here is my code if some one want a good starter:

from torch import nn
from torch.nn import functional as F
import torch


class Model(nn.Module):
    def __init__(self, vocab_size, embedding_dim, hidden_size, n_filters, n_layers, output_size, p):
        super().__init__()
        self.Embedding = nn.Embedding(vocab_size, embedding_dim)
        self.LSTM = nn.LSTM(embedding_dim, hidden_size, num_layers=n_layers, bidirectional=True, batch_first=True, dropout=p)
        self.Conv2d = nn.Conv2d(hidden_size, n_filters, kernel_size=2)
        self.MaxPool2d = nn.MaxPool2d(2)

    def forward(self, x, features=None):
        Embedding = self.Embedding(x)
        output, (hidden, cell) = self.LSTM(Embedding)
        print(self.Conv2d(hidden))

vocab_size = 5
embedding_dim = 55
hidden_size = 300
n_filters = 25
n_layers = 2
output_size = 2
p = 0.5
clf = Model(vocab_size, embedding_dim, hidden_size, n_filters, n_layers, output_size, p)

a = torch.ones((1, 5), dtype=torch.long)

print('a: ', a)
print('clf: ', clf(a))

I figured it out finally.

How did you do it? Could use some help.