1142-Organize Your Train part II

考え方
全ての並べ方を列挙してみる。
実装(C++)

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <climits>
#include <cctype>
#include <ctime>
#include <cassert>
#include <cwchar>
#include <cstdarg>
#include <cwctype>
#include <queue>
#include <stack>
#include <algorithm>
#include <list>
#include <vector>
#include <set>
#include <map>
#include <iostream>
#include <deque>
#include <complex>
#include <string>
#include <functional>
#include <iomanip>
#include <sstream>

#include <tr1/unordered_map>
#include <boost/foreach.hpp>
#define foreach BOOST_FOREACH

using namespace std;
using namespace tr1;
using namespace boost;


typedef long long int lli;
typedef unsigned int uint;
set<string> s;
void solve(string a,int b){
	string c=a.substr(0,b);
	string d=a.substr(b);
	s.insert(d+c);
	std::reverse(c.begin(),c.end());
	s.insert(c+d);s.insert(d+c);
	std::reverse(d.begin(),d.end());
	s.insert(c+d);s.insert(d+c);
	std::reverse(c.begin(),c.end());
	s.insert(c+d);s.insert(d+c);
}
int main(){
	string in;
	for(cin>>in;cin>>in;){
		s.clear();
		s.insert(in);
		int l=in.size();
		for(int i=0;i<l;i++)
			solve(in,i);
		cout<<s.size()<<endl;
	}
	return 0;
}