- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #define max 10000
- int c;
- int map[30][30];
- int dot[30], in[30], out[30], total, ok, check[30], ap[30];
- void visit(int d){
- int i;
- for(i=0; i<total; i++){
- if(map[ap[d]][ap[i]] == 1 && check[i] == 0){
- check[i] = 1;
- c++;
- visit(i);
- }
- }
- }
- int main(){
- char input[1002];
- int N, n, len, i, j, k, odd, t;
- while(N--){
- for(i=0; i<26; i++){
- for(j=i; j<26; j++){
- map[i][j] = map[j][i] = max;
- }
- }
- total = 0;
- while(n--){
- map[input[0]-='a'][input[len-1]-='a'] = 1;
- if(out[input[0]] == 0 && in[input[0]] == 0){
- ap[total] = input[0];
- total++;
- }
- out[input[0]]++;
- if(out[input[len-1]] == 0 && in[input[len-1]] == 0){
- ap[total] = input[len-1];
- total++;
- }
- in[input[len-1]]++;
- }
- odd = 0;
- for(i=0; i<26; i++){
- if(out[i] - in[i] == 1){
- odd += (1<<1);
- for(j=0; j<total; j++){
- if(ap[j] == i){
- t = j;
- break;
- }
- }
- }else if(in[i] - out[i] == 1){
- odd += (1<<2);
- }else if(out[i] - in[i]){
- odd += (1<<3);
- break;
- }
- if(odd >= 6){
- break;
- }
- }
- if((odd & 1<<3) != 0){
- }else if(odd == 6 || odd == 0){
- c = 1;
- if(odd == 6){
- check[t] = 1;
- visit(t);
- }else{
- check[0] = 1;
- visit(0);
- }
- }
- }
- return 0;
- }
Raw Paste