#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(){
cin.tie(0)->sync_with_stdio(0);
ll ar=0;
int k;cin>>k;
vector<pair<int,int>> a(k);
vector<int> b(5'000'001,-1);
vector<int> vis(5'000'001);
vector<vector<int>> c(5'000'001);
vector<int> sd;
for(int x=0;x<k;x++){
auto&[i,j]=a[x];
cin>>i>>j,sd.insert(end(sd),{i,j}),ar+=(ll)i*j,b[i]=x,c[j].push_back(x);
}
sort(begin(sd),end(sd));sd.erase(unique(begin(sd),end(sd)),end(sd));
int tim=0;
vector<int> ans;
for(int i:sd){
tim++;
if(ar%i!=0)continue;
ll ss=min<ll>(ar/i,i);
ll ls=ar/ss;
ll ss2=ss;
int kk=0;
for(int kp=0;kp<k;kp++){
if(ls<ssize(b)&&b[ls]!=-1&&vis[b[ls]]<tim){
vis[b[ls]]=tim;
ss-=a[b[ls]].second;
if(ss<0)break;
kk++;
continue;
}
if(b[ss]!=-1&&vis[b[ss]]<tim){
vis[b[ss]]=tim;
ls-=a[b[ss]].second;
if(ls<0)break;
if(ls<ss)swap(ls,ss);
kk++;
continue;
}
int f=0;
for(int i:c[ss])if(vis[i]<tim){
if(ls<a[i].first)break;
vis[i]=tim;
ls-=a[i].first;
f=1;
kk++;
}
if(ls<ss)swap(ls,ss);
if(!f)break;
}
if(kk==k)ans.push_back(ss2);
}
sort(begin(ans),end(ans));
ans.erase(unique(begin(ans),end(ans)),end(ans));
cout<<ssize(ans)<<'\n';
for(int i:ans)cout<<i<<' ';
cout<<'\n';
}