#include #include using namespace std; int get_best_power(const vector &input) { // 2^29 < 10^9 < 2^30, tedy MAX_PW je nejvyšší mocnina dvojky // ve vstupních číslech. int MAX_PW = 1<<29; // Zkoušíme postupně mocniny dvojky od největší možné for (int d = MAX_PW; d >= 1; d/=2) { // res = (1111....1)_2, tj. pro všechna čísla x <= 10^9 plati x&res = x int res = (1<<30) - 1; for (auto x : input) { // Pokud číslo ze vstupu má na pozici d jedničku, // tak ho vyanduj s průběžným výsledkem. if (x & d) res &= x; } if (0 == (res % d)) // Pokud je průběžný výsledek dělitelný d return d; // Tak víme, ze d je největší takové a můžeme ho vrátit. } } int main() { vector input; int n; cin >> n; input.resize(n); for (int i = 0; i < n; i++) cin >> input[i]; int d = get_best_power(input); int cnt = 0; for (auto x : input) if (x & d) cnt++; cout << cnt << endl; for (auto x : input) if (x & d) cout << x << " "; cout << endl; }