#include <bits/stdc++.h>
#define all(x) begin(x), end(x)
typedef long long ll;
using namespace std;
const double EPS = 1e-8;
template <typename T> int sgn(T x) { return x < -EPS ? -1 : x > EPS; }
template <class T> struct Point {
typedef Point P;
T x, y;
explicit Point(T x = 0, T y = 0) : x(x), y(y) {}
bool operator<(P p) const { return tie(x, y) < tie(p.x, p.y); }
bool operator==(P p) const { return tie(x, y) == tie(p.x, p.y); }
P operator+(P p) const { return P(x + p.x, y + p.y); }
P operator-(P p) const { return P(x - p.x, y - p.y); }
P operator*(T d) const { return P(x * d, y * d); }
P operator/(T d) const { return P(x / d, y / d); }
T dot(P p) const { return x * p.x + y * p.y; }
T cross(P p) const { return x * p.y - y * p.x; }
T cross(P a, P b) const { return (a - *this).cross(b - *this); }
T dist2() const { return x * x + y * y; }
double dist() const { return sqrt((double)dist2()); }
// angle to x-axis in interval [-pi, pi]
double angle() const { return atan2(y, x); }
P unit() const { return *this / dist(); } // makes dist()=1
P perp() const { return P(-y, x); } // rotates +90 degrees
P normal() const { return perp().unit(); }
// returns point rotated 'a' radians ccw around the origin
P rotate(double a) const { return P(x * cos(a) - y * sin(a), x * sin(a) + y * cos(a)); }
};
template <class P> bool onSegment(P s, P e, P p) { return sgn(s.cross(e, p)) == 0 && sgn((s - p).dot(e - p)) <= 0; }
template <class P> bool segInterProper(P a, P b, P c, P d, P &out) {
double oa = c.cross(d, a), ob = c.cross(d, b), oc = a.cross(b, c), od = a.cross(b, d);
if (sgn(oa) * sgn(ob) < 0 && sgn(oc) * sgn(od) < 0) {
out = (a * ob - b * oa) / (ob - oa);
return true;
}
return false;
}
template <class P> set<P> segInter(P a, P b, P c, P d) {
P out;
if (segInterProper(a, b, c, d, out))
return {out};
set<P> s;
if (onSegment(c, d, a))
s.insert(a);
if (onSegment(c, d, b))
s.insert(b);
if (onSegment(a, b, c))
s.insert(c);
if (onSegment(a, b, d))
s.insert(d);
return s;
}
typedef Point<double> P;
ostream &operator<<(ostream &os, P p) { return cout << p.x + EPS << " " << p.y + EPS; }
istream &operator>>(istream &is, P p) { return cin >> p.x >> p.y; }
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
cout << fixed << setprecision(2);
for (int i = 0; i < N; i++) {
P a, b, c, d;
cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y >> d.x >> d.y;
auto res = segInter(a, b, c, d);
if (res.size() == 0) {
cout << "none" << endl;
} else if (res.size() == 1) {
cout << *res.begin() << endl;
} else {
vector<P> t(res.begin(), res.end());
cout << t[0] << ' ' << t[1] << endl;
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGFsbCh4KSBiZWdpbih4KSwgZW5kKHgpCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgZG91YmxlIEVQUyA9IDFlLTg7CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbnQgc2duKFQgeCkgeyByZXR1cm4geCA8IC1FUFMgPyAtMSA6IHggPiBFUFM7IH0KdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBQb2ludCB7CiAgICB0eXBlZGVmIFBvaW50IFA7CiAgICBUIHgsIHk7CiAgICBleHBsaWNpdCBQb2ludChUIHggPSAwLCBUIHkgPSAwKSA6IHgoeCksIHkoeSkge30KICAgIGJvb2wgb3BlcmF0b3I8KFAgcCkgY29uc3QgeyByZXR1cm4gdGllKHgsIHkpIDwgdGllKHAueCwgcC55KTsgfQogICAgYm9vbCBvcGVyYXRvcj09KFAgcCkgY29uc3QgeyByZXR1cm4gdGllKHgsIHkpID09IHRpZShwLngsIHAueSk7IH0KICAgIFAgb3BlcmF0b3IrKFAgcCkgY29uc3QgeyByZXR1cm4gUCh4ICsgcC54LCB5ICsgcC55KTsgfQogICAgUCBvcGVyYXRvci0oUCBwKSBjb25zdCB7IHJldHVybiBQKHggLSBwLngsIHkgLSBwLnkpOyB9CiAgICBQIG9wZXJhdG9yKihUIGQpIGNvbnN0IHsgcmV0dXJuIFAoeCAqIGQsIHkgKiBkKTsgfQogICAgUCBvcGVyYXRvci8oVCBkKSBjb25zdCB7IHJldHVybiBQKHggLyBkLCB5IC8gZCk7IH0KICAgIFQgZG90KFAgcCkgY29uc3QgeyByZXR1cm4geCAqIHAueCArIHkgKiBwLnk7IH0KICAgIFQgY3Jvc3MoUCBwKSBjb25zdCB7IHJldHVybiB4ICogcC55IC0geSAqIHAueDsgfQogICAgVCBjcm9zcyhQIGEsIFAgYikgY29uc3QgeyByZXR1cm4gKGEgLSAqdGhpcykuY3Jvc3MoYiAtICp0aGlzKTsgfQogICAgVCBkaXN0MigpIGNvbnN0IHsgcmV0dXJuIHggKiB4ICsgeSAqIHk7IH0KICAgIGRvdWJsZSBkaXN0KCkgY29uc3QgeyByZXR1cm4gc3FydCgoZG91YmxlKWRpc3QyKCkpOyB9CiAgICAvLyBhbmdsZSB0byB4LWF4aXMgaW4gaW50ZXJ2YWwgWy1waSwgcGldCiAgICBkb3VibGUgYW5nbGUoKSBjb25zdCB7IHJldHVybiBhdGFuMih5LCB4KTsgfQogICAgUCB1bml0KCkgY29uc3QgeyByZXR1cm4gKnRoaXMgLyBkaXN0KCk7IH0gLy8gbWFrZXMgZGlzdCgpPTEKICAgIFAgcGVycCgpIGNvbnN0IHsgcmV0dXJuIFAoLXksIHgpOyB9ICAgICAgIC8vIHJvdGF0ZXMgKzkwIGRlZ3JlZXMKICAgIFAgbm9ybWFsKCkgY29uc3QgeyByZXR1cm4gcGVycCgpLnVuaXQoKTsgfQogICAgLy8gcmV0dXJucyBwb2ludCByb3RhdGVkICdhJyByYWRpYW5zIGNjdyBhcm91bmQgdGhlIG9yaWdpbgogICAgUCByb3RhdGUoZG91YmxlIGEpIGNvbnN0IHsgcmV0dXJuIFAoeCAqIGNvcyhhKSAtIHkgKiBzaW4oYSksIHggKiBzaW4oYSkgKyB5ICogY29zKGEpKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIFA+IGJvb2wgb25TZWdtZW50KFAgcywgUCBlLCBQIHApIHsgcmV0dXJuIHNnbihzLmNyb3NzKGUsIHApKSA9PSAwICYmIHNnbigocyAtIHApLmRvdChlIC0gcCkpIDw9IDA7IH0KdGVtcGxhdGUgPGNsYXNzIFA+IGJvb2wgc2VnSW50ZXJQcm9wZXIoUCBhLCBQIGIsIFAgYywgUCBkLCBQICZvdXQpIHsKICAgIGRvdWJsZSBvYSA9IGMuY3Jvc3MoZCwgYSksIG9iID0gYy5jcm9zcyhkLCBiKSwgb2MgPSBhLmNyb3NzKGIsIGMpLCBvZCA9IGEuY3Jvc3MoYiwgZCk7CiAgICBpZiAoc2duKG9hKSAqIHNnbihvYikgPCAwICYmIHNnbihvYykgKiBzZ24ob2QpIDwgMCkgewogICAgICAgIG91dCA9IChhICogb2IgLSBiICogb2EpIC8gKG9iIC0gb2EpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CnRlbXBsYXRlIDxjbGFzcyBQPiBzZXQ8UD4gc2VnSW50ZXIoUCBhLCBQIGIsIFAgYywgUCBkKSB7CiAgICBQIG91dDsKICAgIGlmIChzZWdJbnRlclByb3BlcihhLCBiLCBjLCBkLCBvdXQpKQogICAgICAgIHJldHVybiB7b3V0fTsKICAgIHNldDxQPiBzOwogICAgaWYgKG9uU2VnbWVudChjLCBkLCBhKSkKICAgICAgICBzLmluc2VydChhKTsKICAgIGlmIChvblNlZ21lbnQoYywgZCwgYikpCiAgICAgICAgcy5pbnNlcnQoYik7CiAgICBpZiAob25TZWdtZW50KGEsIGIsIGMpKQogICAgICAgIHMuaW5zZXJ0KGMpOwogICAgaWYgKG9uU2VnbWVudChhLCBiLCBkKSkKICAgICAgICBzLmluc2VydChkKTsKICAgIHJldHVybiBzOwp9CnR5cGVkZWYgUG9pbnQ8ZG91YmxlPiBQOwpvc3RyZWFtICZvcGVyYXRvcjw8KG9zdHJlYW0gJm9zLCBQIHApIHsgcmV0dXJuIGNvdXQgPDwgcC54ICsgRVBTIDw8ICIgIiA8PCBwLnkgKyBFUFM7IH0KaXN0cmVhbSAmb3BlcmF0b3I+Pihpc3RyZWFtICZpcywgUCBwKSB7IHJldHVybiBjaW4gPj4gcC54ID4+IHAueTsgfQpzaWduZWQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGludCBOOwogICAgY2luID4+IE47CiAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbigyKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgUCBhLCBiLCBjLCBkOwogICAgICAgIGNpbiA+PiBhLnggPj4gYS55ID4+IGIueCA+PiBiLnkgPj4gYy54ID4+IGMueSA+PiBkLnggPj4gZC55OwogICAgICAgIGF1dG8gcmVzID0gc2VnSW50ZXIoYSwgYiwgYywgZCk7CiAgICAgICAgaWYgKHJlcy5zaXplKCkgPT0gMCkgewogICAgICAgICAgICBjb3V0IDw8ICJub25lIiA8PCBlbmRsOwogICAgICAgIH0gZWxzZSBpZiAocmVzLnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgIGNvdXQgPDwgKnJlcy5iZWdpbigpIDw8IGVuZGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmVjdG9yPFA+IHQocmVzLmJlZ2luKCksIHJlcy5lbmQoKSk7CiAgICAgICAgICAgIGNvdXQgPDwgdFswXSA8PCAnICcgPDwgdFsxXSA8PCBlbmRsOwogICAgICAgIH0KICAgIH0KfQ==