struct Complex
{
    public Complex(float real, float imaginary)
    {
        mRealValue = real;
        mImaginaryValue = imaginary;
    }

    public float Real
    {
        get
        {
            return mRealValue;
        }
        set
        {
            mRealValue = value;
        }
    }

    public float Imaginary
    {
        get
        {
            return mImaginaryValue;
        }
        set
        {
            mImaginaryValue = value;
        }
    }

    public override string ToString()
    {
        return mRealValue.ToString() + " + " + mImaginaryValue.ToString() + "i";
    }

    public static Complex operator +(Complex c1, Complex c2)
    {
        return new Complex(c1.Real + c2.Real, c1.Imaginary + c2.Imaginary);
    }

    public static Complex operator *(Complex c1, Complex c2)
    {
        return new Complex(c1.Real * c2.Real - c1.Imaginary * c2.Imaginary,
                           c1.Real * c2.Imaginary + c1.Imaginary * c2.Real);
    }
    private float mRealValue;
    private float mImaginaryValue;
}