func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> d[256];   int mask[256];   vector<int> q;   bool b[256];   bool good[256];   int kd[256];   vector<int> g;   vector<pair<pair<int, int>, pair<int, int> > > res;   int n;   int need;   void Debug(vector<int> A) {     for (int i = 0; i < A.size(); i++) {       printf( %d  , A[i]);     }     puts(  );   }   int read() {     char ch =    ;     int x = 0;     while (!isdigit(ch)) ch = getchar();     while (isdigit(ch)) {       x = (x << 3) + (x << 1) + ch -  0 ;       ch = getchar();     }     return x;   }   void Init() {     n = read();     for (int i = 0; i < n; i++) {       int x = read();       need = need | (1 << x);       b[x] = true;     }     if (n > 6) {       puts( 0 );       exit(0);     }     for (int i = 255; i >= 0; i--) {       good[i] = true;       int x = i;       mask[i] = 0;       while (x > 0) {         mask[i] = mask[i] | (1 << (x % 10));         if (!b[x % 10]) good[i] = false;         d[i].push_back(x % 10);         x = x / 10;       }       if (i == 0 and !b[i]) good[i] = false;       if (i == 0) {         d[i].push_back(0);         mask[i] = mask[i] | 1;       }       if (good[i]) g.push_back(i);     }   }   void Solve() {     for (int x = 0; x < 256; x++) {       if (good[x]) {         for (int y = 0; y < 256; y++) {           if (good[y]) {             for (int w = 0; w < 256; w++) {               if (good[w]) {                 if ((mask[x] | mask[y] | mask[w]) != need) continue;                 for (int z = 0; z < 256; z++) {                   if (good[z]) {                     q.clear();                     for (int i = d[x].size() - 1; i >= 0; i--)                       q.push_back(d[x][i]);                     for (int i = d[y].size() - 1; i >= 0; i--)                       q.push_back(d[y][i]);                     for (int i = d[w].size() - 1; i >= 0; i--)                       q.push_back(d[w][i]);                     for (int i = d[z].size() - 1; i >= 0; i--)                       q.push_back(d[z][i]);                     bool ok = true;                     for (int i = 0; i < q.size(); i++) {                       if (q[i] != q[q.size() - 1 - i]) {                         ok = false;                         break;                       }                     }                     if (ok)                       res.push_back(make_pair(make_pair(x, y), make_pair(w, z)));                   }                 }               }             }           }         }       }     }   }   void Print() {     printf( %d n , res.size());     for (int i = 0; i < res.size(); i++) {       printf( %d.%d.%d.%d n , res[i].first.first, res[i].first.second,              res[i].second.first, res[i].second.second);     }   }   int main() {     Init();     Solve();     Print();     return 0;   }   