#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T abs(T a) {
  return a > 0 ? a : -a;
}
int n;
int m;
string a[10];
vector<string> ans;
string cur = "";
void go2(string &s, int k, int m) {
  if (k == ((int)(s).size()) && m == 0) {
    ans.push_back(cur);
    return;
  }
  if (m == 0) return;
  if (k == ((int)(s).size())) return;
  int num = 0;
  if (s[k] == '0') {
    cur += ".0";
    go2(s, k + 1, m - 1);
    cur.resize(((int)(cur).size()) - 2);
    return;
  }
  string tmp = "";
  for (int i = k; i < ((int)(s).size()) && i < k + 3; i++) {
    num = num * 10 + s[i] - '0';
    tmp += s[i];
    if (num < 256) {
      cur += "." + tmp;
      go2(s, i + 1, m - 1);
      cur.resize(((int)(cur).size()) - 1 - ((int)(tmp).size()));
    } else
      break;
  }
}
int cnt[10];
string s = "";
void go() {
  if (((int)(s).size()) * 2 - 1 > 12) return;
  if (((int)(s).size())) {
    bool kpyto = true;
    for (int i = 0; i < (n); i++) {
      if (!cnt[i]) kpyto = false;
    }
    if (kpyto) {
      string t = s;
      for (int i = ((((int)(s).size())) - 1); i >= 0; i--) t += s[i];
      go2(t, 0, 4);
      t = s;
      for (int i = ((((int)(s).size()) - 1) - 1); i >= 0; i--) t += s[i];
      go2(t, 0, 4);
    }
  }
  for (int i = 0; i < n; i++) {
    cnt[i]++;
    s += a[i];
    go();
    s.resize(((int)(s).size()) - 1);
    cnt[i]--;
  }
}
int main() {
  cin >> n;
  for (int i = 0; i < (n); i++) {
    cin >> a[i];
  }
  go();
  cout << ((int)(ans).size()) << endl;
  for (int i = 0; i < (((int)(ans).size())); i++) {
    for (int j = 1; j < ((int)(ans[i]).size()); j++) printf("%c", ans[i][j]);
    printf("\n");
  }
  return 0;
}
