

class G1:
    def __init__(self):
        self.y = 0

    def evaluate(self, u, delta_t):
        output = self.y
        self.y = self.y - self.y * delta_t + u * delta_t
        return output


class G2:
    def __init__(self):
        self.y = 0

    def evaluate(self, u, delta_t):
        output = self.y
        self.y = self.y + 2 * self.y * delta_t + 3 * u * delta_t
        return output


class G3:
    def __init__(self):
        self.y = 0

    def evaluate(self, u, delta_t):
        output = self.y
        self.y = self.y - 4 * self.y * delta_t + u * delta_t
        return output


class BigSystem:
    def __init__(self):
        self.g1 = G1()
        self.g2 = G2()
        self.g3 = G3()
        self.y = 0

    def evaluate(self, u, delta_t):
        in_g2 = u - self.g3.evaluate(self.y, delta_t)
        output = self.g1.evaluate(u, delta_t) + \
			self.g2.evaluate(in_g2, delta_t)
        self.y = output
        return output

