#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> numbers;
vector<int> c;
vector<int> indices;
int total = 0;
//ponis
int search(int start, int end, int value){
if(start > end) return -1;
if(start== end){
if(c[start] == value)return start;
return -1;
}
if(end- start == 1){
if(c[start] == value) return start;
if(c[end] == value) return end;
return -1;
}
int middle = (start + end)/2;
if(c[middle] == value) return middle;
if(c[middle] < value) return search(middle+1, end, value);
return search(start, middle-1, value);
}
int main(){
int n;
cin >> n;
int temp;
for(int i =0; i < n; i++){
cin >> temp;
numbers.push_back(temp);
c.push_back(temp);
total+=temp;
}
sort(c.begin(), c.end());
int index;
for(int i =0; i < numbers.size(); i++){
c[numbers[i]]--;
if((total - numbers[i]) % 2 == 0){
temp = total-numbers[i];
temp/=2;
index = search(0, numbers.size()-1, temp);
if(index != -1){
if(numbers[i] != temp){
indices.push_back(i);
}else{
if(index + 1 < numbers.size() && c[index+1] == temp){
indices.push_back(i);
}else if(index > 0 && c[index-1] == temp){
indices.push_back(i);
}
}
}
}
c[numbers[i]]++;
}
cout << indices.size() << endl;
for(int i =0; i < indices.size(); i++){
cout << (indices[i] + 1 ) << " ";
}
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3RvcjxpbnQ+IG51bWJlcnM7CnZlY3RvcjxpbnQ+IGM7CnZlY3RvcjxpbnQ+IGluZGljZXM7CmludCB0b3RhbCA9IDA7CgovL3BvbmlzCmludCBzZWFyY2goaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgdmFsdWUpewoKICAgIGlmKHN0YXJ0ID4gZW5kKSByZXR1cm4gLTE7CgogICAgaWYoc3RhcnQ9PSBlbmQpewogICAgICAgIGlmKGNbc3RhcnRdID09IHZhbHVlKXJldHVybiBzdGFydDsKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgaWYoZW5kLSBzdGFydCA9PSAxKXsKICAgICAgICBpZihjW3N0YXJ0XSA9PSB2YWx1ZSkgcmV0dXJuIHN0YXJ0OwogICAgICAgIGlmKGNbZW5kXSA9PSB2YWx1ZSkgcmV0dXJuIGVuZDsKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgaW50IG1pZGRsZSA9IChzdGFydCArIGVuZCkvMjsKCiAgICBpZihjW21pZGRsZV0gPT0gdmFsdWUpIHJldHVybiBtaWRkbGU7CgogICAgaWYoY1ttaWRkbGVdIDwgdmFsdWUpIHJldHVybiBzZWFyY2gobWlkZGxlKzEsIGVuZCwgdmFsdWUpOwoKICAgIHJldHVybiBzZWFyY2goc3RhcnQsIG1pZGRsZS0xLCB2YWx1ZSk7Cn0KCmludCBtYWluKCl7CgogICAgaW50IG47CiAgICBjaW4gPj4gbjsKCiAgICBpbnQgdGVtcDsKCiAgICBmb3IoaW50IGkgPTA7IGkgPCBuOyBpKyspewogICAgICAgIGNpbiA+PiB0ZW1wOwogICAgICAgIG51bWJlcnMucHVzaF9iYWNrKHRlbXApOwogICAgICAgIGMucHVzaF9iYWNrKHRlbXApOwogICAgICAgIHRvdGFsKz10ZW1wOwoKICAgIH0KCgogICAgc29ydChjLmJlZ2luKCksIGMuZW5kKCkpOwoKICAgIGludCBpbmRleDsKCiAgICBmb3IoaW50IGkgPTA7IGkgPCBudW1iZXJzLnNpemUoKTsgaSsrKXsKICAgICAgICBjW251bWJlcnNbaV1dLS07CiAgICAgICAgaWYoKHRvdGFsIC0gbnVtYmVyc1tpXSkgJSAyID09IDApewogICAgICAgICAgICB0ZW1wID0gdG90YWwtbnVtYmVyc1tpXTsKICAgICAgICAgICAgdGVtcC89MjsKCiAgICAgICAgICAgIGluZGV4ID0gc2VhcmNoKDAsIG51bWJlcnMuc2l6ZSgpLTEsIHRlbXApOwoKICAgICAgICAgICAgaWYoaW5kZXggIT0gLTEpewogICAgICAgICAgICAgICAgaWYobnVtYmVyc1tpXSAhPSB0ZW1wKXsKICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2hfYmFjayhpKTsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgIGlmKGluZGV4ICsgMSA8IG51bWJlcnMuc2l6ZSgpICYmIGNbaW5kZXgrMV0gPT0gdGVtcCl7CiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMucHVzaF9iYWNrKGkpOwogICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGluZGV4ID4gMCAmJiBjW2luZGV4LTFdID09IHRlbXApewogICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2hfYmFjayhpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgICAgIGNbbnVtYmVyc1tpXV0rKzsKICAgIH0KCiAgICBjb3V0IDw8IGluZGljZXMuc2l6ZSgpIDw8IGVuZGw7CgogICAgZm9yKGludCBpID0wOyBpIDwgaW5kaWNlcy5zaXplKCk7IGkrKyl7CiAgICAgICAgY291dCA8PCAoaW5kaWNlc1tpXSArIDEgKSA8PCAiICI7CiAgICB9CiAgICBjb3V0IDw8IGVuZGw7CgoKICAgIHJldHVybiAwOwp9