- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
#include <iostream>
#include <string>
using namespace std;
// 組み合わせを覚えておく配列
string kumi[10000];
int ct;
void add(string s)
{
int i;
for(i=0; i<ct; i++){
if(kumi[i]==s) break;
}
if(i==ct){
kumi[ct++]=s;
}
}
string reverse(string s)
{
string t=s;
for(int i=0; i<s.length(); i++){
t[i]=s[s.length()-i-1];
}
return t;
}
int main()
{
int m;
cin >> m;
for(int i=0; i<m; i++){
for(int k=0; k<10000; k++){
kumi[i]="";
}
ct=0;
string train;
cin >> train;
// cout << train << endl;
for(int j=1; j<train.length(); j++){
// 前の正順、前の逆順、後ろの正順、後ろの逆順
string f1, f2, b1, b2;
f1=train.substr(0, j);
b1=train.substr(j);
f2=reverse(f1);
b2=reverse(b1);
add(f1+b1);
add(f1+b2);
add(f2+b1);
add(f2+b2);
add(b1+f1);
add(b1+f2);
add(b2+f1);
add(b2+f2);
}
// for(int i=0; i<ct; i++){
// cout << kumi[i] << " ";
// }
cout << ct << endl;
}
return 0;
}