#include <bits/stdc++.h>
using namespace std;
struct cubo {
  int cara[6];
};
bool operator==(cubo A, cubo B) {
  for (int i = 0; i < (6); i++) {
    if (A.cara[i] != B.cara[i]) return false;
  }
  return true;
}
cubo inicial;
vector<cubo> v;
string s;
int valor(char c) {
  string q = "ROYGBV";
  for (int i = 0; i < (q.size()); i++) {
    if (c == q[i]) return i;
  }
  while (true)
    ;
}
void rotateX(cubo &A) {
  int a = A.cara[0];
  int b = A.cara[2];
  int c = A.cara[4];
  int d = A.cara[5];
  A.cara[0] = d;
  A.cara[2] = a;
  A.cara[4] = b;
  A.cara[5] = c;
}
void rotateY(cubo &A) {
  int a = A.cara[1];
  int b = A.cara[2];
  int c = A.cara[3];
  int d = A.cara[5];
  A.cara[1] = d;
  A.cara[2] = a;
  A.cara[3] = b;
  A.cara[5] = c;
}
bool compare(cubo A, cubo B) {
  for (int i = 0; i < (4); i++) {
    rotateX(A);
    if (A == B) return true;
    for (int j = 0; j < (4); j++) {
      rotateY(A);
      if (A == B) return true;
      for (int k = 0; k < (4); k++) {
        rotateX(A);
        if (A == B) return true;
      }
    }
  }
  return false;
}
int main() {
  cin >> s;
  for (int i = 0; i < (6); i++) {
    inicial.cara[i] = valor(s[i]);
  }
  int tc = 720;
  while (tc--) {
    bool nuevo = true;
    for (int i = 0; i < (v.size()); i++) {
      if (compare(v[i], inicial)) nuevo = false;
    }
    if (nuevo) {
      v.push_back(inicial);
    }
    next_permutation(inicial.cara, inicial.cara + 6);
  }
  printf("%d\n", v.size());
  return 0;
}
