#include <bits/stdc++.h>
using namespace std;
struct point {
long long x;
long long y;
point (long long nx = 0, long long ny = 0): x(nx), y(ny) {
}
bool operator< (const point &p) const {
return x < p.x || (x == p.x && y < p.y);
}
bool operator== (const point &p) const {
return x == p.x && y == p.y;
}
};
bool clockwise (point a, point b, point c) {
return ((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)) < 0;
}
bool counter_clockwise (point a, point b, point c) {
return ((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)) > 0;
}
long long distance (const point &a, const point &b) {
return (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y);
}
int main () {
int N;
cin >> N;
vector<point> a(0);
for (int i = 0; i < N; i++) {
long long x, y;
cin >> x >> y;
a.emplace_back(x,y);
}
sort(a.begin(), a.end());
if (a[0] == a[N - 1]) {
cout << 0;
return 0;
}
point left = a[0];
point right = a[N-1];
vector <point> top(0);
top.push_back(left);
vector <point> lower(0);
lower.push_back(left);
for (int i = 1; i < N; i++) {
if (i == N - 1 || counter_clockwise(left, a[i], right)) {
while (!counter_clockwise(lower[lower.size() - 2], lower[lower.size() - 1], a[i]) && lower.size() >= 2 ) {
lower.pop_back();
}
lower.push_back(a[i]);
}
if (i == N - 1 || clockwise(left, a[i], right)) {
while (top.size() >= 2 && !clockwise(top[top.size() - 2], top[top.size() - 1], a[i])) {
top.pop_back();
}
top.push_back(a[i]);
}
}
vector<point> ans(0);
for (auto i : top) {
ans.push_back(i);
}
for (int i = lower.size() - 2; i > 0; --i) {
ans.push_back(lower[i]);
}
long long diam = 0;
for (int i = 0, j = 1; i < ans.size(); i++) {
while ((j < ans.size() - 1) && (distance(ans[i],ans[j]) <= distance(ans[i],ans[j+1])) ){
j++;
}
diam = max(diam, distance(ans[i], ans[j]));
}
cout << fixed << setprecision(20);
cout << sqrt(diam);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IHBvaW50IHsKICAgIGxvbmcgbG9uZyB4OwogICAgbG9uZyBsb25nIHk7CiAgICBwb2ludCAobG9uZyBsb25nIG54ID0gMCwgbG9uZyBsb25nIG55ID0gMCk6IHgobngpLCB5KG55KSB7CiAgICB9CiAgICBib29sIG9wZXJhdG9yPCAoY29uc3QgcG9pbnQgJnApIGNvbnN0IHsKICAgICAgICByZXR1cm4geCA8IHAueCB8fCAoeCA9PSBwLnggJiYgeSA8IHAueSk7CiAgICB9CiAgICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IHBvaW50ICZwKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHggPT0gcC54ICYmIHkgPT0gcC55OwogICAgfQp9Owpib29sIGNsb2Nrd2lzZSAocG9pbnQgYSwgcG9pbnQgYiwgcG9pbnQgYykgewogICAgcmV0dXJuICgoYi54IC0gYS54KSAqIChjLnkgLSBhLnkpIC0gKGIueSAtIGEueSkgKiAoYy54IC0gYS54KSkgPCAwOwp9Cgpib29sIGNvdW50ZXJfY2xvY2t3aXNlIChwb2ludCBhLCBwb2ludCBiLCBwb2ludCBjKSB7CiAgICByZXR1cm4gKChiLnggLSBhLngpICogKGMueSAtIGEueSkgLSAoYi55IC0gYS55KSAqIChjLnggLSBhLngpKSA+IDA7Cn0KCmxvbmcgbG9uZyBkaXN0YW5jZSAoY29uc3QgcG9pbnQgJmEsIGNvbnN0IHBvaW50ICZiKSB7CiAgICByZXR1cm4gKGEueCAtIGIueCkqKGEueCAtIGIueCkgKyAoYS55IC0gYi55KSooYS55IC0gYi55KTsKfQoKaW50IG1haW4gKCkgewogICAgaW50IE47CiAgICBjaW4gPj4gTjsKICAgIHZlY3Rvcjxwb2ludD4gYSgwKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgbG9uZyBsb25nIHgsIHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICBhLmVtcGxhY2VfYmFjayh4LHkpOwogICAgfQogICAgc29ydChhLmJlZ2luKCksIGEuZW5kKCkpOwogICAgaWYgKGFbMF0gPT0gYVtOIC0gMV0pIHsKICAgICAgICBjb3V0IDw8IDA7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgcG9pbnQgbGVmdCA9IGFbMF07CiAgICBwb2ludCByaWdodCA9IGFbTi0xXTsKICAgIHZlY3RvciA8cG9pbnQ+IHRvcCgwKTsKICAgIHRvcC5wdXNoX2JhY2sobGVmdCk7CiAgICB2ZWN0b3IgPHBvaW50PiBsb3dlcigwKTsKICAgIGxvd2VyLnB1c2hfYmFjayhsZWZ0KTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgaWYgKGkgPT0gTiAtIDEgfHwgY291bnRlcl9jbG9ja3dpc2UobGVmdCwgYVtpXSwgcmlnaHQpKSB7CiAgICAgICAgICAgIHdoaWxlICghY291bnRlcl9jbG9ja3dpc2UobG93ZXJbbG93ZXIuc2l6ZSgpIC0gMl0sIGxvd2VyW2xvd2VyLnNpemUoKSAtIDFdLCBhW2ldKSAmJiBsb3dlci5zaXplKCkgPj0gMiApIHsKICAgICAgICAgICAgICAgIGxvd2VyLnBvcF9iYWNrKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbG93ZXIucHVzaF9iYWNrKGFbaV0pOwogICAgICAgIH0KICAgICAgICBpZiAoaSA9PSBOIC0gMSB8fCBjbG9ja3dpc2UobGVmdCwgYVtpXSwgcmlnaHQpKSB7CiAgICAgICAgICAgIHdoaWxlICh0b3Auc2l6ZSgpID49IDIgJiYgIWNsb2Nrd2lzZSh0b3BbdG9wLnNpemUoKSAtIDJdLCB0b3BbdG9wLnNpemUoKSAtIDFdLCBhW2ldKSkgewogICAgICAgICAgICAgICAgdG9wLnBvcF9iYWNrKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdG9wLnB1c2hfYmFjayhhW2ldKTsKICAgICAgICB9CiAgICB9CiAgICB2ZWN0b3I8cG9pbnQ+IGFucygwKTsKICAgIGZvciAoYXV0byBpIDogdG9wKSB7CiAgICAgICAgYW5zLnB1c2hfYmFjayhpKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBsb3dlci5zaXplKCkgLSAyOyBpID4gMDsgLS1pKSB7CiAgICAgICAgYW5zLnB1c2hfYmFjayhsb3dlcltpXSk7CiAgICB9CiAgICBsb25nIGxvbmcgZGlhbSA9IDA7CiAgICBmb3IgKGludCBpID0gMCwgaiA9IDE7IGkgPCBhbnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICB3aGlsZSAoKGogPCBhbnMuc2l6ZSgpIC0gMSkgICYmIChkaXN0YW5jZShhbnNbaV0sYW5zW2pdKSA8PSBkaXN0YW5jZShhbnNbaV0sYW5zW2orMV0pKSApewogICAgICAgICAgICBqKys7CiAgICAgICAgfQogICAgICAgIGRpYW0gPSBtYXgoZGlhbSwgZGlzdGFuY2UoYW5zW2ldLCBhbnNbal0pKTsKICAgIH0KICAgIGNvdXQgPDwgZml4ZWQgPDwgc2V0cHJlY2lzaW9uKDIwKTsKICAgIGNvdXQgPDwgc3FydChkaWFtKTsKICAgIHJldHVybiAwOwp9