トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

2006db1.cpp

#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;
}