#include <stdio.h>
#include <string.h>
char str[100][10]; //문자열 길이 10, 최대 갯수 100개 배열
int str_cnt[100][26] = { 0, }; //각 알파벳에 대한 갯수를 저장하는 정수형 배열
int chk_composite_char(char* str, char target)
{
int length = strlen(str);
int i, cnt = 0;
for (i = 0; i < length; i++)
{
if (str[i] == target)
{
cnt++;
}
}
return cnt;
}//문자열에 해당 문자가 몇개인지를 리턴해주는 함수
int main()
{
int num_str, i, j, arr_str_cnt, answer_cnt = 0, error_cnt; //num_str은 문자열 갯수
int buf_pivot_address[2], buf_target_address[2]; //error_cnt에 해당하는 두 배열 주소가 같은지 확인하기 위한 배열
scanf(" %d", &num_str);
for (i = 0; i < num_str; i++)
{
scanf(" %s", &str[i]);
}
for (i = 0; i < num_str; i++)
{
for (j = 65; j <= 90; j++)
{
str_cnt[i][j-65] = chk_composite_char(str[i], (char)j);
}
}
/*
for (i = 0; i < 26; i++)
{
printf("%c ", (char)(i + 65));
}
printf("\n");
for (i = 0; i < num_str; i++)
{
for (j = 0; j < 26; j++)
{
printf("%d ", str_cnt[i][j]);
}
printf("\n");
}*/
for (i = 1; i < num_str; i++)
{
arr_str_cnt = 0;
error_cnt = 0;
for (j = 0; j < 26; j++)
{
if (str_cnt[0][j] == str_cnt[i][j]) //같은 구성 가질떄
{
arr_str_cnt++;
}
if (-1 == (str_cnt[0][j] - str_cnt[i][j]) || (str_cnt[0][j] - str_cnt[i][j]) == 1) //알파벳 하나의 개수만 다를 떄
{
if (error_cnt == 0)
{
buf_pivot_address[0] = str_cnt[0][j];
buf_target_address[0] = str_cnt[i][j];
}
else if (error_cnt == 1)
{
buf_pivot_address[1] = str_cnt[0][j];
buf_target_address[1] = str_cnt[i][j];
}
error_cnt++;
}
}
if (arr_str_cnt == 26) //같은 구성일 때
{
answer_cnt++;
}
if (error_cnt == 1 && arr_str_cnt == 25) //빼고, 더해서 가능할 때
{
answer_cnt++;
}
if ((error_cnt == 2 && arr_str_cnt == 24) && (buf_pivot_address[0] == buf_target_address[1] && buf_pivot_address[1] == buf_target_address[0])) //바꿔서 가능할 때
{
answer_cnt++;
}
}
printf("%d", answer_cnt);
return 0;
}