#include <bits/stdc++.h>
using namespace std;
const int INF = 1E9 + 7;
template <class C>
void mini(C& a4, C b4) {
  a4 = min(a4, b4);
}
template <class C>
void maxi(C& a4, C b4) {
  a4 = max(a4, b4);
}
template <typename T1, typename T2>
ostream& operator<<(ostream& out, pair<T1, T2> pair) {
  out << "(" << pair.first << ", " << pair.second << ")";
  return out;
}
int dig[11];
char co[20];
int L, n;
set<string> ans;
bool tak[10];
void check() {
  if (co[L] == '.') return;
  int z = 0;
  for (int i = (1); i <= (L); ++i)
    if (co[i] == '.') ++z;
  if (z != 3) return;
  int s = 0;
  int l = 0;
  for (int i = (1); i <= (L); ++i) {
    if (co[i] == '.') {
      if (l == 0) return;
      if (s > 255) return;
      s = 0;
      l = 0;
    } else {
      if (l >= 1 && s == 0) return;
      s = s * 10 + co[i] - '0';
      l++;
    }
  }
  if (s > 255) return;
  memset((tak), 0, sizeof(tak));
  for (int i = (1); i <= (L); ++i)
    if (co[i] != '.') {
      tak[co[i] - '0'] = 1;
    }
  z = 0;
  for (int i = (0); i <= (9); ++i) z += tak[i];
  if (z != n) return;
  string x(co + 1, co + 1 + L);
  ans.insert(x);
}
void go(int pos1, int pos2, int parts, int sum1, int sum2, int pot) {
  if (sum1 > 255 || sum2 > 255) return;
  if (pos1 > pos2) {
    check();
    return;
  }
  if (pos1 == pos2) {
    co[pos1] = '.';
    check();
    for (int d = (1); d <= (n); ++d) {
      co[pos1] = dig[d] + '0';
      check();
    }
    return;
  }
  {
    for (int d = (1); d <= (n); ++d) {
      co[pos2] = co[pos1] = dig[d] + '0';
      go(pos1 + 1, pos2 - 1, parts, sum1 * 10 + dig[d], pot * dig[d] + sum2,
         pot * 10);
    }
    if (co[pos1 - 1] != '.') {
      co[pos1] = '.';
      go(pos1 + 1, pos2, parts + 1, 0, sum2, pot);
    }
    if (co[pos2 + 1] != '.') {
      co[pos2] = '.';
      go(pos1, pos2 - 1, parts + 1, sum1, 0, 1);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  for (int i = (1); i <= (n); ++i) cin >> dig[i];
  if (n > 6) {
    cout << 0 << endl;
    return 0;
  }
  for (int len = (6); len <= (15); ++len) {
    L = len;
    co[0] = '.';
    co[len + 1] = '.';
    go(1, len, 0, 0, 0, 1);
  }
  cout << ((int)(ans).size()) << endl;
  for (__typeof((ans).begin()) it = ((ans).begin()); it != (ans).end(); ++it)
    cout << *it << endl;
  return 0;
}
