int nzs = 0;
for(long l:_ls) if(l != 0)++nzs;
if((nzs+1)*MIN_SPARSE_RATIO < _len2){
set_sparse(nzs);
assert _len == 0 || _len  <= _ls.length:"_len = " + _len + ", _ls.length = " + _ls.length + ", nzs = " + nzs + ", len2 = " + _len2;
<BUG>assert _id.length == _ls.length;
return;</BUG>
}
} else {
if((MIN_SPARSE_RATIO*(_len) >> 1) > _len2)  cancel_sparse();

int nzs = 0;
for(long l:_ls) if(l != 0)++nzs;
if((nzs+1)*MIN_SPARSE_RATIO < _len2){
set_sparse(nzs);
assert _len == 0 || _len  <= _ls.length:"_len = " + _len + ", _ls.length = " + _ls.length + ", nzs = " + nzs + ", len2 = " + _len2;
assert _id.length == _ls.length;
assert _len <= _len2;
return;
}
} else {
if((MIN_SPARSE_RATIO*(_len) >> 1) > _len2)  cancel_sparse();
