#define _USE_MATH_DEFINES
    #include <numeric>
    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <cstdio>
    #include <map>
    #include <set>
    #include <functional>
    #include <queue>
    #include <string>
    #include <bitset>
    #include <cassert>
    #include <iomanip>
    #include <algorithm>
    #include <cmath>
    #include <set>
    #include <algorithm>
    #include <tuple>
    #include <sstream>

    using namespace std;

    #ifdef LOCAL
    #define logv(a) {cerr << #a << " = "; for (auto& e : a) {cerr << e << " ";} cerr << "\n";}
    #define logvp(a) {cerr << #a << " = "; for (auto& e : a) {cerr << "(" << e.first << ", " << e.second << ") ";} cerr << "\n";}
    #define logvv(a) {cerr << #a << " = \n"; for (auto& r : a) { for (auto& e : r) {cerr << e << " ";} cerr << "\n";} }
    #define logvf(a, field) {cerr << #a"."#field << " = \n"; for (auto& e : a) { cerr << e.field << " ";} cerr << "\n"; }
    #define logs(a) cerr << #a << " = " << (a) << "\n";
    #define logss(a, b) cerr << #a << " = " << (a) << ", " << #b << " = " << (b) << "\n";
    #define logp(a) cerr << #a << " = " << "(" << a.first << ", " << a.second << ")" << "\n";
    #define cond(pred, stmt) if (pred) { stmt }
    #else
    #define logv(a)
    #define logvp(a)
    #define logvv(a)
    #define logvf(a, field)
    #define logs(a)
    #define logss(a, b)
    #define logp(a)
    #define cond(pred, stmt)
    #endif

    #define forn(a, e) for (int a = 0; a < (int)e; a++)
    #define forr(a, s, e) for (int a = s; a < (int)e; a++)

    using i64 = long long;

    template<typename T>
    using Pair = array<T, 2>;

    int main() {
        ios_base::sync_with_stdio(false);
        cin.tie(NULL);

        i64 n;
        while (cin >> n) {
            vector<int> x(n);
            vector<pair<long double, int>> dir(n);
            vector<pair<i64, i64>> bc;
            vector<int> y(n);

            forn(i, n) {
                cin >> x[i] >> y[i];
                // dir[i].first = atan2l(y[i], x[i]);
                // dir[i].second = i;
            }

            i64 maxdist = 0;
            forn(i, n) forn(k, n) {
                vector<int> used(n);
                // used[i] = true;
                long double bx = (x[i] * 1.0l + x[k]) / 2;
                long double by = (y[i] * 1.0l + y[k]) / 2;
                i64 curx = 0;
                i64 cury = 0;
                bool found = true;
                while (found) {
                    logss(curx, cury);
                    found = false;
                    forn(j, n) {
                        if (!used[j]) {

                            i64 nx = x[j];
                            i64 ny = y[j];
                            if (nx * bx + ny * by > 0) {
                                found = true;
                                curx += nx;
                                cury += ny;
                                used[j] = true;
                                break;
                            }
                        }
                    }
                }
                maxdist = max(maxdist, curx*curx + cury*cury);
                logs(sqrtl(curx*curx + cury*cury));
            }
            cout << fixed << setprecision(20) << sqrtl((long double)maxdist) << endl;
        }
    }


Measured memory_bytes: 256