class Veci {
    private final int[] data;

    public Veci(int n) {
        data = new int[n];
    }

    public Veci(Veci arg) {
        data = new int[arg.data.length];
        System.arraycopy(arg.data, 0, data, 0, data.length);
    }

    public int length() {
        return data.length;
    }

    public int get(int i) {
        return data[i];
    }

    public void set(int i, int val) {
        data[i] = val;
    }

    public Vec2f toVec2f() throws DimensionMismatchException {
        if (length() != 2) {
            throw new DimensionMismatchException();
        }
        Vec2f out = new Vec2f();
        for (int i = 0; i < 2; i++) {
            out.set(i, get(i));
        }
        return out;
    }

    public Vec3f toVec3f() throws DimensionMismatchException {
        if (length() != 3) {
            throw new DimensionMismatchException();
        }
        Vec3f out = new Vec3f();
        for (int i = 0; i < 3; i++) {
            out.set(i, get(i));
        }
        return out;
    }

    public Vecf toVecf() {<FILL_FUNCTION_BODY>}
}

        Vecf out = new Vecf(length());
        for (int i = 0; i < length(); i++) {
            out.set(i, get(i));
        }
        return out;
    
<no_super_class>