#include <bits/stdc++.h>
using namespace std;
template <class T>
bool uin(T &a, T b) {
  return a > b ? (a = b, true) : false;
}
template <class T>
bool uax(T &a, T b) {
  return a < b ? (a = b, true) : false;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(10);
  cout << fixed;
  int n;
  cin >> n;
  vector<int> data;
  set<int> dataset;
  vector<int> nums;
  nums.push_back(1);
  for (int i = 1; i <= 30; i++) {
    nums.push_back(2 << (i - 1));
  }
  for (int i = 0; i < (int)(n); ++i) {
    int a;
    cin >> a;
    data.push_back(a);
    dataset.insert(a);
  }
  sort((data).begin(), (data).end());
  vector<int> sol;
  for (int i = 0; i < (int)(n); ++i) {
    long long x = data[i];
    for (int j = 0; j < (int)(nums.size()); ++j) {
      bool plus1 = dataset.find(x + nums[j]) != dataset.end();
      bool plus2 = dataset.find(x + 2 * nums[j]) != dataset.end();
      if (plus1 && plus2) {
        sol.clear();
        sol.push_back(x);
        sol.push_back(x + nums[j]);
        sol.push_back(x + 2 * nums[j]);
      } else if (plus1 && sol.size() < 2) {
        sol.clear();
        sol.push_back(x);
        sol.push_back(x + nums[j]);
      } else if (sol.size() < 1) {
        sol.clear();
        sol.push_back(x);
      }
    }
  }
  cout << sol.size() << endl;
  for (int i = 0; i < (int)(sol.size()); ++i) {
    cout << sol[i];
    if (i + 1 != sol.size()) cout << " ";
  }
  return 0;
}
