Entry extractMinimum() {

        Entry t;
        Entry w;
        // ++
        access += 1;
        Entry z = minimum;

        // ++ ++
        access += 2;
        if (z.child != null) {
            // Usuwamy referencje do rodzicow wszystkich synow "z"
            // ++ ++ ++
            access += 3;
            w = z.child;
            // ++ ++
            access += 2;
            t = w;

            do {
                // ++ ++
                access += 2;
                t.parent = null;
                // ++ ++ ++
                access += 3;
                t = t.right;
                // ++ ++
                access += 2;
            }
            while (t != w);
            // Dodajemy synow do roota
            // ++ ++ ++ ++ ++
            access += 4;
            minimum.left.right = w.right;
            // ++ ++ ++ ++ ++
            access += 5;
            w.right.left = minimum.left;
            // ++ ++ ++
            access += 3;
            minimum.left = w;
            // ++ ++ ++
            access += 3;
            w.right = minimum;
        }

        // Usuwamy "z" z roota
        // ++ ++ ++ ++ ++
        access += 5;
        z.left.right = z.right;
        // ++ ++ ++ ++ ++
        access += 5;
        z.right.left = z.left;

        // ++ ++ ++
        access += 3;
        if (z == z.right) {
            // kopiec jest pusty
            // ++
            access += 1;
            minimum = null;
        } else {
            // Wywolanie metody "consolidate()"
            // ++ ++ ++
            access += 3;
            minimum = z.right;
            consolidate();
        }
        size--;

        // Zwraca stare minimum
        return z;
    }