//約数列挙できないなあ…と思って、A=10^9+7, B=2A-1の例を考えていたら見えた。 //この問題、2進数の使い方が上手。 #include #include #define int long long using namespace std; int T; int a, b; signed main() { int i; cin >> T; while (T--) { cin >> a >> b; vector ans; while (a < b) { int mul = 1; while (a % mul == 0) { mul *= 2; } mul /= 2; if (a + mul <= b) { ans.push_back(mul); a += mul; } else { while (a + mul > b) mul /= 2; ans.push_back(mul); a += mul; } } cout << ans.size() << endl; for (int i = 0; i < ans.size(); i++) { cout << ans[i]; if (i + 1 < ans.size()) cout << " "; } cout << endl; } return 0; }