#include <bits/stdc++.h>
using namespace std;
int powers[] = {10, 1000, 10000, 100000, 1000000};
bool isPal(string s) {
  int n = s.size();
  for (int i = 0; i < n / 2; i++) {
    if (s[i] != s[n - 1 - i]) {
      return false;
    }
  }
  return true;
}
int main() {
  int k;
  while (cin >> k) {
    int dSet = 0;
    vector<string> bytes;
    vector<int> sets;
    for (int i = 0; i < k; i++) {
      int d;
      cin >> d;
      dSet |= (1 << d);
    }
    for (int i = 0; i < 256; i++) {
      string s;
      int mask = 0;
      int d = i % 10;
      if ((dSet & (1 << d)) == 0) {
        continue;
      }
      s += d + '0';
      mask |= (1 << d);
      int j = i / 10;
      bool isOk = true;
      while (j) {
        int d = j % 10;
        if ((dSet & (1 << d)) == 0) {
          isOk = false;
          break;
        }
        j /= 10;
        s = char(d + '0') + s;
        mask |= (1 << d);
      }
      if (isOk) {
        bytes.push_back(s);
        sets.push_back(mask);
      }
    }
    vector<string> ans;
    for (int i1 = 0; i1 < bytes.size(); i1++) {
      string s1 = bytes[i1];
      int n1 = s1.size();
      for (int i2 = 0; i2 < bytes.size(); i2++) {
        string s2 = bytes[i2];
        int n2 = s2.size();
        int mask = sets[i1] | sets[i2];
        if (n1 + n2 == 6 && mask != dSet) {
          continue;
        }
        for (int i3 = 0; i3 < bytes.size(); i3++) {
          string s3 = bytes[i3];
          mask = sets[i1] | sets[i2] | sets[i3];
          if (mask != dSet) {
            continue;
          }
          int n3 = s3.size();
          string var = s1 + s2 + s3;
          string test1 = var + var[0];
          if (isPal(test1)) {
            string s = s1 + '.' + s2 + '.' + s3 + '.' + var[0];
            ans.push_back(s);
          }
          string test2 = var + var[1] + var[0];
          if (var[1] != '0' && isPal(test2)) {
            string s = s1 + '.' + s2 + '.' + s3 + '.' + var[1] + var[0];
            ans.push_back(s);
          }
          string test3 = var + var[2] + var[1] + var[0];
          if (var[2] != '0' && isPal(test3)) {
            int num =
                100 * (var[2] - '0') + 10 * (var[1] - '0') + (var[0] - '0');
            if (num >= 256) {
              continue;
            }
            string s =
                s1 + '.' + s2 + '.' + s3 + '.' + var[2] + var[1] + var[0];
            ans.push_back(s);
          }
        }
      }
    }
    cout << ans.size() << endl;
    for (int i = 0; i < ans.size(); i++) {
      printf("%s\n", ans[i].c_str());
    }
  }
  return 0;
}
