#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  if (a == 0 || b == 0 || a == b) return a == b ? a : (a > 0 ? a : b);
  return a > b ? gcd(b, a % b) : gcd(a, b % a);
}
bool isPrime(long long a) {
  long long c;
  for (c = 2; c <= a / 2; c++) {
    if (a % c == 0) return 0;
  }
  return 1;
}
bool isPalindrome(int n) {
  int t = n;
  queue<int> q;
  while (t) {
    q.push(t % 10);
    t /= 10;
  }
  while (!q.empty()) {
    t = t * 10 + q.front();
    q.pop();
  }
  return (t == n ? 1 : 0);
}
bool contains0(int n) {
  if (!n) return 1;
  bool b = 0;
  while (n) {
    if (n % 10 == 0) b = 1;
    n /= 10;
  }
  return b;
}
int digits(int n) {
  int c = 0;
  while (n) {
    c++;
    n /= 10;
  }
  return c;
}
int main() {
  int n;
  cin >> n;
  int a[n];
  vector<int> v;
  bool d1 = 0, d2 = 0, d100 = 0, d0 = 0;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    if (a[i] == 0) d0 = 1;
    if (a[i] == 100) d100 = 1;
    if (a[i] == 0 || a[i] == 100) v.push_back(a[i]);
    if (d1 == 0 && a[i] > 0 && a[i] < 10) {
      v.push_back(a[i]);
      d1 = 1;
    }
    if (d2 == 0 && digits(a[i]) == 2 && contains0(a[i])) {
      v.push_back(a[i]);
      d2 = 1;
    }
  }
  if (d2 == 0 && d100 && d1 == 0)
    for (int i = 0; i < n; i++) {
      if (digits(a[i]) == 2) {
        if (d2 == 0 && d1 == 0) v.push_back(a[i]);
        d2 = 1;
        d1 = 1;
      }
    }
  if (d100 == 0 && d0 == 1 && d1 == 0 && d2 == 0) {
    for (int i = 0; i < n; i++)
      if (digits(a[i]) == 2) {
        if (!d2) v.push_back(a[i]);
        d2 = 1;
      }
  }
  if (v.size() == 0) v.push_back(a[0]);
  cout << v.size() << "\n";
  for (int i = 0; i < v.size(); i++) cout << v[i] << " ";
  cout << endl;
  return 0;
}
