import java.util.*;
import java.lang.*;
import java.io.*;
class Quaternion {
private double a;
private double b;
private double c;
private double d;
public Quaternion() {
a = 0;
b = 0;
c = 0;
d = 0;
}
public Quaternion(double a) {
this.a = a;
b = 0;
c = 0;
d = 0;
}
public Quaternion(double a, double b, double c, double d) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
public Quaternion conjug() {
return new Quaternion(a, -b, -c, -d);
}
public double abs() {
return Math.sqrt(a * a + b * b + c * c + d * d);
}
public Quaternion inverse() throws ArithmeticException {
return Quaternion.divide(this.conjug(), this.abs() * this.abs());
}
public boolean isZero() {
return (a == 0 && b == 0 && c == 0 && d == 0);
}
public static Quaternion sum(Quaternion a, Quaternion b) {
return new Quaternion(a.a + b.a, a.b + b.b, a.c + b.c, a.d + b.d);
}
public static Quaternion sub(Quaternion a, Quaternion b) {
return new Quaternion(a.a - b.a, a.b - b.b, a.c - b.c, a.d - b.d);
}
public static Quaternion mul(Quaternion a, double mult) {
return new Quaternion(a.a * mult, a.b * mult, a.c * mult, a.d * mult);
}
public static Quaternion mul(Quaternion a, Quaternion b) {
return new Quaternion(a.a * b.a - a.b * b.b - a.c * b.c - a.d * b.d,
a.a * b.b + a.b * b.a + a.c * b.d - a.d * b.c,
a.a * b.c - a.b * b.d + a.c * b.a + a.d * b.b,
a.a * b.d + a.b * b.c - a.c * b.b + a.d * b.a);
}
public static Quaternion divide(Quaternion a, double divider) throws ArithmeticException {
if (divider == 0) throw new ArithmeticException("Zero divider");
return new Quaternion(a.a / divider, a.b / divider, a.c / divider, a.d / divider);
}
public static Quaternion divide(Quaternion a, Quaternion b) throws ArithmeticException {
if (b.isZero()) throw new ArithmeticException("Zero divider");
return Quaternion.mul(a, b.inverse());
}
public String toString() {
return new String(a +
((b < 0)? " - " : " + ") + Math.abs(b) + "*i" +
((c < 0)? " - " : " + ") + Math.abs(c) + "*j" +
((d < 0)? " - " : " + ") + Math.abs(d) + "*k\n");
}
}
class Main {
public static void main (String[] args) {
Quaternion qt1 = new Quaternion();
Quaternion qt2 = new Quaternion(5);
Quaternion qt3 = new Quaternion(1, 2, 3, 4);
Quaternion qt4 = new Quaternion(0.1, 1.4, -2.5, -1.7);
if (!qt1.isZero()) {
System.out.print(Quaternion.sum(qt3, qt4));
} else {
System.out.print(Quaternion.mul(qt3, qt4));
}
do {
qt2 = Quaternion.sub(qt2, qt3);
System.out.print(qt2);
System.out.print(qt2.conjug());
System.out.print(qt2.inverse());
} while (qt2.isZero());
try {
System.out.print(Quaternion.divide(qt3, qt4));
} catch (ArithmeticException e) {
System.out.print(e.getMessage());
}
System.out.print(Quaternion.mul(qt3, 17.2));
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBRdWF0ZXJuaW9uIHsKCXByaXZhdGUgZG91YmxlIGE7Cglwcml2YXRlIGRvdWJsZSBiOwoJcHJpdmF0ZSBkb3VibGUgYzsKCXByaXZhdGUgZG91YmxlIGQ7CgkKCXB1YmxpYyBRdWF0ZXJuaW9uKCkgewoJCWEgPSAwOwoJCWIgPSAwOwoJCWMgPSAwOwoJCWQgPSAwOwoJfQoJcHVibGljIFF1YXRlcm5pb24oZG91YmxlIGEpIHsKCQl0aGlzLmEgPSBhOwoJCWIgPSAwOwoJCWMgPSAwOwoJCWQgPSAwOwoJfQoJcHVibGljIFF1YXRlcm5pb24oZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQpIHsKCQl0aGlzLmEgPSBhOwoJCXRoaXMuYiA9IGI7CgkJdGhpcy5jID0gYzsKCQl0aGlzLmQgPSBkOwoJfQoJCglwdWJsaWMgUXVhdGVybmlvbiBjb25qdWcoKSB7CgkJcmV0dXJuIG5ldyBRdWF0ZXJuaW9uKGEsIC1iLCAtYywgLWQpOwoJfQoJcHVibGljIGRvdWJsZSBhYnMoKSB7CgkJcmV0dXJuIE1hdGguc3FydChhICogYSAgKyBiICogYiArIGMgKiBjICsgZCAqIGQpOwoJfQoJcHVibGljIFF1YXRlcm5pb24gaW52ZXJzZSgpIHRocm93cyBBcml0aG1ldGljRXhjZXB0aW9uIHsKCQlyZXR1cm4gUXVhdGVybmlvbi5kaXZpZGUodGhpcy5jb25qdWcoKSwgdGhpcy5hYnMoKSAqIHRoaXMuYWJzKCkpOwoJfQoJcHVibGljIGJvb2xlYW4gaXNaZXJvKCkgewoJCXJldHVybiAoYSA9PSAwICYmIGIgPT0gMCAmJiBjID09IDAgJiYgZCA9PSAwKTsKCX0KCQoJcHVibGljIHN0YXRpYyBRdWF0ZXJuaW9uIHN1bShRdWF0ZXJuaW9uIGEsIFF1YXRlcm5pb24gYikgewoJCXJldHVybiBuZXcgUXVhdGVybmlvbihhLmEgKyBiLmEsIGEuYiArIGIuYiwgYS5jICsgYi5jLCBhLmQgKyBiLmQpOwoJfQoJcHVibGljIHN0YXRpYyBRdWF0ZXJuaW9uIHN1YihRdWF0ZXJuaW9uIGEsIFF1YXRlcm5pb24gYikgewoJCXJldHVybiBuZXcgUXVhdGVybmlvbihhLmEgLSBiLmEsIGEuYiAtIGIuYiwgYS5jIC0gYi5jLCBhLmQgLSBiLmQpOwoJfQoJcHVibGljIHN0YXRpYyBRdWF0ZXJuaW9uIG11bChRdWF0ZXJuaW9uIGEsIGRvdWJsZSBtdWx0KSB7CgkJcmV0dXJuIG5ldyBRdWF0ZXJuaW9uKGEuYSAqIG11bHQsIGEuYiAqIG11bHQsIGEuYyAqIG11bHQsIGEuZCAqIG11bHQpOwoJfQoJcHVibGljIHN0YXRpYyBRdWF0ZXJuaW9uIG11bChRdWF0ZXJuaW9uIGEsIFF1YXRlcm5pb24gYikgewoJCXJldHVybiBuZXcgUXVhdGVybmlvbihhLmEgKiBiLmEgLSBhLmIgKiBiLmIgLSBhLmMgKiBiLmMgLSBhLmQgKiBiLmQsCgkJCQkJCQkgIGEuYSAqIGIuYiArIGEuYiAqIGIuYSArIGEuYyAqIGIuZCAtIGEuZCAqIGIuYywKCQkJCQkJCSAgYS5hICogYi5jIC0gYS5iICogYi5kICsgYS5jICogYi5hICsgYS5kICogYi5iLAoJCQkJCQkJICBhLmEgKiBiLmQgKyBhLmIgKiBiLmMgLSBhLmMgKiBiLmIgKyBhLmQgKiBiLmEpOwoJfQoJcHVibGljIHN0YXRpYyBRdWF0ZXJuaW9uIGRpdmlkZShRdWF0ZXJuaW9uIGEsIGRvdWJsZSBkaXZpZGVyKSB0aHJvd3MgQXJpdGhtZXRpY0V4Y2VwdGlvbiB7CgkJaWYgKGRpdmlkZXIgPT0gMCkgdGhyb3cgbmV3IEFyaXRobWV0aWNFeGNlcHRpb24oIlplcm8gZGl2aWRlciIpOwoJCXJldHVybiBuZXcgUXVhdGVybmlvbihhLmEgLyBkaXZpZGVyLCBhLmIgLyBkaXZpZGVyLCBhLmMgLyBkaXZpZGVyLCBhLmQgLyBkaXZpZGVyKTsKCX0KCXB1YmxpYyBzdGF0aWMgUXVhdGVybmlvbiBkaXZpZGUoUXVhdGVybmlvbiBhLCBRdWF0ZXJuaW9uIGIpIHRocm93cyBBcml0aG1ldGljRXhjZXB0aW9uIHsKCQlpZiAoYi5pc1plcm8oKSkgdGhyb3cgbmV3IEFyaXRobWV0aWNFeGNlcHRpb24oIlplcm8gZGl2aWRlciIpOwoJCXJldHVybiBRdWF0ZXJuaW9uLm11bChhLCBiLmludmVyc2UoKSk7Cgl9CgkKCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CgkJcmV0dXJuIG5ldyBTdHJpbmcoYSArCgkJCQkJCSAgKChiIDwgMCk/ICIgLSAiIDogIiArICIpICsgTWF0aC5hYnMoYikgKyAiKmkiICsKCQkJCQkJICAoKGMgPCAwKT8gIiAtICIgOiAiICsgIikgKyBNYXRoLmFicyhjKSArICIqaiIgKwoJCQkJCQkgICgoZCA8IDApPyAiIC0gIiA6ICIgKyAiKSArIE1hdGguYWJzKGQpICsgIiprXG4iKTsKCX0KfQpjbGFzcyBNYWluIHsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CgkJUXVhdGVybmlvbiBxdDEgPSBuZXcgUXVhdGVybmlvbigpOwoJCVF1YXRlcm5pb24gcXQyID0gbmV3IFF1YXRlcm5pb24oNSk7CgkJUXVhdGVybmlvbiBxdDMgPSBuZXcgUXVhdGVybmlvbigxLCAyLCAzLCA0KTsKCQlRdWF0ZXJuaW9uIHF0NCA9IG5ldyBRdWF0ZXJuaW9uKDAuMSwgMS40LCAtMi41LCAtMS43KTsKCQlpZiAoIXF0MS5pc1plcm8oKSkgewoJCQlTeXN0ZW0ub3V0LnByaW50KFF1YXRlcm5pb24uc3VtKHF0MywgcXQ0KSk7CgkJfSBlbHNlIHsKCQkJU3lzdGVtLm91dC5wcmludChRdWF0ZXJuaW9uLm11bChxdDMsIHF0NCkpOwoJCX0KCQlkbyB7CgkJCXF0MiA9IFF1YXRlcm5pb24uc3ViKHF0MiwgcXQzKTsKCQkJU3lzdGVtLm91dC5wcmludChxdDIpOwoJCQlTeXN0ZW0ub3V0LnByaW50KHF0Mi5jb25qdWcoKSk7CgkJCVN5c3RlbS5vdXQucHJpbnQocXQyLmludmVyc2UoKSk7CgkJfSB3aGlsZSAocXQyLmlzWmVybygpKTsKCQl0cnkgewoJCQlTeXN0ZW0ub3V0LnByaW50KFF1YXRlcm5pb24uZGl2aWRlKHF0MywgcXQ0KSk7CgkJfSBjYXRjaCAoQXJpdGhtZXRpY0V4Y2VwdGlvbiBlKSB7CgkJCVN5c3RlbS5vdXQucHJpbnQoZS5nZXRNZXNzYWdlKCkpOwoJCX0KCQlTeXN0ZW0ub3V0LnByaW50KFF1YXRlcm5pb24ubXVsKHF0MywgMTcuMikpOwoJfQp9