static LL allSubsetsOfLength(int m, L objects) { new LL subsets; new L pot; int n = l(objects); int p = 1; if (m==0) { subsets.add(new L); ret subsets; } for (int i=0; i<=n; i++){ pot.add(p); p*=2; } for (int i=1; i=0; j--) { int currentPot = pot.get(j); if (y >= currentPot) { binArray[j] = true; y -= currentPot; sum++; } if (y<=0) break; } if (sum==m){ new L subsubset; for (int j=0; j < n; j++) if (binArray[j]) subsubset.add(objects.get(j)); subsets.add(subsubset); } } ret subsets; }