#include<bits/stdc++.h>
using namespace std;
#define ll pair<long long, long long>
#define dll pair<ll,long long>
#define fi first
#define se second
const long long inf = 1e18;
const int maxn = 10+1e3;
long long n,d,x,y;
vector<dll> g,tam;
bool cmp(dll a, dll b)
{
if (a.fi.fi==b.fi.fi) return (a.fi.se<b.fi.se);
return (a.fi.fi<b.fi.fi);
}
bool cmp1(dll a, dll b)
{
return (a.se<b.se);
}
long long cal(ll a, ll b, ll c)
{
return (b.fi-a.fi)*(c.se-b.se)-(c.fi-b.fi)*(b.se-a.se);
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
freopen("TREE.INP","r",stdin);
freopen("TREE.OUT","w",stdout);
cin>>n;
for (int i=1; i<=n; i++)
{
cin>>x>>y;
g.push_back({{x,y},i});
}
sort (g.begin(), g.end(), cmp);
int d=0;
while (d<g.size()-1)
{
if (g[d].fi.fi==g[d+1].fi.fi&&g[d].fi.se==g[d+1].fi.se) g.erase(g.begin()+d);
else d++;
}
tam.push_back(g[0]);
for (int i=1; i<n; i++)
{
while (tam.size()>=2&&cal(tam[tam.size()-2].fi, tam.back().fi, g[i].fi)>0) tam.pop_back();
tam.push_back(g[i]);
}
for (int i=n-2; i>=0; i--)
{
while (tam.size()>=2&&cal(tam[tam.size()-2].fi, tam.back().fi, g[i].fi)>0) tam.pop_back();
tam.push_back(g[i]);
}
d=1;
while (d<tam.size()-1)
if (cal(tam[d-1].fi, tam[d].fi, tam[d+1].fi)==0) tam.erase(tam.begin()+d);
else d++;
if (n>1) tam.pop_back();
sort(tam.begin(),tam.end(),cmp1);
cout<<tam.size()<<endl;
for (int i=0; i<=tam.size()-1; i++) cout<<tam[i].se<<" ";
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBwYWlyPGxvbmcgbG9uZywgbG9uZyBsb25nPgojZGVmaW5lIGRsbCBwYWlyPGxsLGxvbmcgbG9uZz4KI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZApjb25zdCBsb25nIGxvbmcgaW5mID0gMWUxODsKY29uc3QgaW50IG1heG4gPSAxMCsxZTM7CmxvbmcgbG9uZyBuLGQseCx5Owp2ZWN0b3I8ZGxsPiBnLHRhbTsKYm9vbCBjbXAoZGxsIGEsIGRsbCBiKQogewogCWlmIChhLmZpLmZpPT1iLmZpLmZpKSByZXR1cm4gKGEuZmkuc2U8Yi5maS5zZSk7CiAJcmV0dXJuIChhLmZpLmZpPGIuZmkuZmkpOwogfQpib29sIGNtcDEoZGxsIGEsIGRsbCBiKQogewogCXJldHVybiAoYS5zZTxiLnNlKTsKIH0KbG9uZyBsb25nIGNhbChsbCBhLCBsbCBiLCBsbCBjKQogewogCXJldHVybiAoYi5maS1hLmZpKSooYy5zZS1iLnNlKS0oYy5maS1iLmZpKSooYi5zZS1hLnNlKTsKIH0KaW50IG1haW4oKXsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7CglmcmVvcGVuKCJUUkVFLklOUCIsInIiLHN0ZGluKTsKCWZyZW9wZW4oIlRSRUUuT1VUIiwidyIsc3Rkb3V0KTsKCWNpbj4+bjsKCWZvciAoaW50IGk9MTsgaTw9bjsgaSsrKQoJIHsKCSAJY2luPj54Pj55OwoJIAlnLnB1c2hfYmFjayh7e3gseX0saX0pOwoJIH0KCXNvcnQgKGcuYmVnaW4oKSwgZy5lbmQoKSwgY21wKTsKCWludCBkPTA7Cgl3aGlsZSAoZDxnLnNpemUoKS0xKSAKCSB7CgkJaWYgKGdbZF0uZmkuZmk9PWdbZCsxXS5maS5maSYmZ1tkXS5maS5zZT09Z1tkKzFdLmZpLnNlKSBnLmVyYXNlKGcuYmVnaW4oKStkKTsKCQkJZWxzZSBkKys7CgkgfQoJdGFtLnB1c2hfYmFjayhnWzBdKTsKCWZvciAoaW50IGk9MTsgaTxuOyBpKyspIAoJIHsKCQl3aGlsZSAodGFtLnNpemUoKT49MiYmY2FsKHRhbVt0YW0uc2l6ZSgpLTJdLmZpLCB0YW0uYmFjaygpLmZpLCBnW2ldLmZpKT4wKSB0YW0ucG9wX2JhY2soKTsKCQl0YW0ucHVzaF9iYWNrKGdbaV0pOwoJIH0KCWZvciAoaW50IGk9bi0yOyBpPj0wOyBpLS0pIAoJIHsKCQl3aGlsZSAodGFtLnNpemUoKT49MiYmY2FsKHRhbVt0YW0uc2l6ZSgpLTJdLmZpLCB0YW0uYmFjaygpLmZpLCBnW2ldLmZpKT4wKSB0YW0ucG9wX2JhY2soKTsKCQl0YW0ucHVzaF9iYWNrKGdbaV0pOwoJIH0KCWQ9MTsKCXdoaWxlIChkPHRhbS5zaXplKCktMSkgCgkJaWYgKGNhbCh0YW1bZC0xXS5maSwgdGFtW2RdLmZpLCB0YW1bZCsxXS5maSk9PTApIHRhbS5lcmFzZSh0YW0uYmVnaW4oKStkKTsKCQkJZWxzZSBkKys7CglpZiAobj4xKSB0YW0ucG9wX2JhY2soKTsKCXNvcnQodGFtLmJlZ2luKCksdGFtLmVuZCgpLGNtcDEpOwoJY291dDw8dGFtLnNpemUoKTw8ZW5kbDsKCWZvciAoaW50IGk9MDsgaTw9dGFtLnNpemUoKS0xOyBpKyspIGNvdXQ8PHRhbVtpXS5zZTw8IiAiOwp9Cg==