#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b, int& x, int& y) {
if (b == 0) {
x = 1;
y = 0;
return a;
}
int x1, y1;
int d = gcd(b, a % b, x1, y1);
x = y1;
y = x1 - y1 * (a / b);
return d;
}
int main(){
int a,b,x,y;
cin>>a>>b;
vector<int>v;
gcd(a,b,x,y);
for(int c=1;c<(a-1)*(b-1);c++){
int x0=x*c,y0=y*c;
bool flag1=1,flag2=1;
// if both flags are 1 that means c can not be represented so we push it to the vector
int cnt=x0/b;
x0-=b*cnt,y0+=a*cnt;
if(x0<0) x0+=b,y0-=a;
if(y0>=0) flag1=0;
cnt=y0/a;
x0+=b*cnt,y0-=a*cnt;
if(y0<0) x0-=b,y0+=a;
if(x0>=0) flag2=0;
if(flag1&&flag2)v.push_back(c);
}
cout<<v.size()<<'\n';
for(auto i:v) cout<<i<<" ";
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBnY2QoaW50IGEsIGludCBiLCBpbnQmIHgsIGludCYgeSkgewogICAgaWYgKGIgPT0gMCkgewogICAgICAgIHggPSAxOwogICAgICAgIHkgPSAwOwogICAgICAgIHJldHVybiBhOwogICAgfQogICAgaW50IHgxLCB5MTsKICAgIGludCBkID0gZ2NkKGIsIGEgJSBiLCB4MSwgeTEpOwogICAgeCA9IHkxOwogICAgeSA9IHgxIC0geTEgKiAoYSAvIGIpOwogICAgcmV0dXJuIGQ7Cn0KCgppbnQgbWFpbigpewogICAgaW50IGEsYix4LHk7CiAgICBjaW4+PmE+PmI7CiAgICB2ZWN0b3I8aW50PnY7CiAgICBnY2QoYSxiLHgseSk7CiAgICBmb3IoaW50IGM9MTtjPChhLTEpKihiLTEpO2MrKyl7CiAgICAgICAgaW50IHgwPXgqYyx5MD15KmM7CiAgICAgICAgYm9vbCBmbGFnMT0xLGZsYWcyPTE7Ci8vIGlmIGJvdGggZmxhZ3MgYXJlIDEgdGhhdCBtZWFucyBjIGNhbiBub3QgYmUgcmVwcmVzZW50ZWQgc28gd2UgcHVzaCBpdCB0byB0aGUgdmVjdG9yCgogICAgICAgIGludCBjbnQ9eDAvYjsKICAgICAgICB4MC09YipjbnQseTArPWEqY250OwogICAgICAgIGlmKHgwPDApIHgwKz1iLHkwLT1hOwogICAgICAgIGlmKHkwPj0wKSBmbGFnMT0wOwoKICAgICAgICBjbnQ9eTAvYTsKICAgICAgICB4MCs9YipjbnQseTAtPWEqY250OwogICAgICAgIGlmKHkwPDApIHgwLT1iLHkwKz1hOwogICAgICAgIGlmKHgwPj0wKSBmbGFnMj0wOwoKICAgICAgICBpZihmbGFnMSYmZmxhZzIpdi5wdXNoX2JhY2soYyk7CiAgICB9CiAgICBjb3V0PDx2LnNpemUoKTw8J1xuJzsKICAgIGZvcihhdXRvIGk6dikgY291dDw8aTw8IiAiOwp9