struct Complex<T> {
    x: T,
    y: T
}

fn main() {
    let z1  = Complex{x: 2, y: 5};
    let z2 = Complex{x: 4, y: -7};

    // sum
    let mut sum = Complex{x: 0, y: 0};
    sum.x = z1.x + z2.x;
    sum.y = z1.y + z2.y;
    println!("Re:{}, Im:{}", sum.x, sum.y);

    // difference
    let mut diff = Complex{x: 0, y: 0};
    diff.x = z1.x - z2.x;
    diff.y = z1.y - z2.y;
    println!("Re:{}, Im:{}", diff.x, diff.y);

    // product
    let mut prod = Complex{x: 0, y: 0};
    prod.x = z1.x * z2.x - z1.y * z2.y;
    prod.y = z1.y * z2.x + z1.x * z2.y;
    println!("Re:{}, Im:{}", prod.x, prod.y);
}
