#include <iostream>
#include <vector>
#include <set>
using namespace std;
vector<int> shiftOneCircle(int num) {
vector<int> res;
for (int i = 0; i < 100; ++i) {
res.push_back((num + 100 - i) % 100);
}
return res;
}
vector<int> shiftTwoCircles(int num1, int num2) {
vector<int> res;
for (int i = 0; i < 100; ++i) {
res.push_back((num1 + 100 - i) % 100);
res.push_back((num2 + 100 - i) % 100);
}
return res;
}
int main() {
int n;
cin >> n;
vector<vector<int>> states(n, vector<int>(5));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < 5; ++j) {
cin >> states[i][j];
}
}
set<vector<int>> allPossible;
for (int pos = 0; pos < 5; ++pos) {
vector<int> oneShift = shiftOneCircle(states[0][pos]);
for (int val : oneShift) {
vector<int> temp = states[0];
temp[pos] = val;
allPossible.insert(temp);
}
}
for (int pos = 0; pos < 4; ++pos) {
vector<int> twoShift = shiftTwoCircles(states[0][pos], states[0][pos + 1]);
for (int i = 0; i < twoShift.size(); i += 2) {
vector<int> temp = states[0];
temp[pos] = twoShift[i];
temp[pos + 1] = twoShift[i + 1];
allPossible.insert(temp);
}
}
for (int i = 1; i < n; ++i) {
set<vector<int>> curPossible;
for (int pos = 0; pos < 5; ++pos) {
vector<int> oneShift = shiftOneCircle(states[i][pos]);
for (int val : oneShift) {
vector<int> temp = states[i];
temp[pos] = val;
if (allPossible.count(temp)) {
curPossible.insert(temp);
}
}
}
for (int pos = 0; pos < 4; ++pos) {
vector<int> twoShift = shiftTwoCircles(states[i][pos], states[i][pos + 1]);
for (int j = 0; j < twoShift.size(); j += 2) {
vector<int> temp = states[i];
temp[pos] = twoShift[j];
temp[pos + 1] = twoShift[j + 1];
if (allPossible.count(temp)) {
curPossible.insert(temp);
}
}
}
allPossible = curPossible;
}
cout << allPossible.size() << endl;
return 0;
}
哪错啦