#include <bits/stdc++.h>
using namespace std;
int cocoon[10][5];
int area[5][5];
vector<int> bita, bitb;
int ans;
bool used[10];
void check(int depth) {
  int ret = 0;
  if (depth == 10) {
    ans++;
    return;
  } else if (depth >= 5) {
    for (int i = 0; i < 5; i++) {
      int num = bitb[i];
      if (used[num]) continue;
      used[num] = true;
      bool flag1 = true, flag2 = true;
      for (int j = 0; j < 5; j++) {
        if (area[j][depth - 5] == cocoon[num][j]) flag1 = false;
        if (area[j][depth - 5] == cocoon[num][4 - j]) flag2 = false;
      }
      if (flag1) check(depth + 1);
      if (flag2) check(depth + 1);
      used[num] = false;
    }
  } else {
    for (int i = 0; i < 5; i++) {
      int num = bita[i];
      if (used[num]) continue;
      used[num] = true;
      for (int j = 0; j < 5; j++) {
        area[depth][j] = cocoon[num][j];
      }
      check(depth + 1);
      for (int j = 0; j < 5; j++) {
        area[depth][j] = cocoon[num][4 - j];
      }
      check(depth + 1);
      used[num] = false;
    }
  }
  return;
}
int main(void) {
  char in[50];
  char end[] = "END";
  while (cin >> in) {
    if (in[0] == 'E') break;
    for (int j = 0; j < 5; j++) {
      cocoon[0][j] = in[j] - '0';
    }
    for (int i = 1; i <= 9; i++) {
      cin >> in;
      for (int j = 0; j < 5; j++) {
        cocoon[i][j] = in[j] - '0';
      }
    }
    ans = 0;
    for (int i = 0; i < 512; i++) {
      bita.clear();
      bitb.clear();
      int num = i;
      for (int j = 0; j <= 9; j++) {
        if (num % 2 != 0)
          bita.push_back(j);
        else
          bitb.push_back(j);
        num = num / 2;
      }
      if (bita.size() != 5) continue;
      check(0);
    }
    cout << ans / 32 << endl;
  }
  return 0;
}
