
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n); // 输入整数 n,表示需要处理的字符串数量
getchar(); // 清除输入缓冲区中的换行符
for (int i = 0; i < n; i++) { // 遍历每个字符串
char s[10005] = {}; // 定义字符数组 s,用于存储输入的字符串
char s_1[10005] = {}; // 定义字符数组 s_1,用于存储处理后的字符串
gets(s); // 输入字符串 s
s_1[0] = ' '; // 在数组前方加入一个空格,避免在判断 'I' 和 "me" 时不会越界
printf("%s\n", s); // 输出原始字符串 s
printf("AI: "); // 输出 AI 提示
int flag = 1, k = 1; // flag 用于标记是否需要添加空格,k 用于记录 s_1 的当前索引
for (int j = 0; j < strlen(s); j++) { // 遍历字符串 s
if (s[j] == ' ') { // 如果当前字符是空格
if (flag == 0) { // 如果 flag 为 0,表示可以添加空格
flag = 1; // 设置 flag 为 1,表示已经添加空格
s_1[k] = s[j]; // 将空格添加到 s_1 中
k++; // 更新 s_1 的索引
}
}
else if ('a' <= s[j] && s[j] <= 'z' || '0' <= s[j] && s[j] <= '9') { // 如果当前字符是小写字母或数字
flag = 0; // 设置 flag 为 0,表示不需要添加空格
s_1[k] = s[j]; // 将字符添加到 s_1 中
k++; // 更新 s_1 的索引
}
else if ('A' <= s[j] && s[j] <= 'Z') { // 如果当前字符是大写字母
if (s[j] != 'I') { // 如果字符不是 'I'
s_1[k] = s[j] + 32; // 将大写字母转换为小写字母
} else {
s_1[k] = s[j]; // 保持 'I' 不变
}
flag = 0; // 设置 flag 为 0
k++; // 更新 s_1 的索引
}
else { // 如果当前字符是符号
if (flag == 1 && k != 1) { // 如果字符前面有空格且不是第一个字符
s_1[k - 1] = s[j]; // 用符号覆盖空格
} else {
s_1[k] = s[j]; // 将符号添加到 s_1 中
k++; // 更新 s_1 的索引
}
flag = 0; // 符号后面可以存在空格,重置 flag
}
}
if (flag == 1) { // 如果最后有空格
k--; // 去掉最后一个空格
s_1[k] = '\0'; // 标记字符串结束
}
char temp, s_2[10005] = {}; // 定义字符数组 s_2,用于存储最终处理后的字符串
for (int j = 0, l = 0; j < k; j++, l++) { // 遍历 s_1
// 判断是否是独立的 "can you"
if (s_1[j] == 'c' && s_1[j + 1] == 'a' && s_1[j + 2] == 'n' && s_1[j + 3] == ' ' && s_1[j + 4] == 'y' && s_1[j + 5] == 'o' && s_1[j + 6] == 'u' &&
!('a' <= s_1[j - 1] && s_1[j - 1] <= 'z' || 'A' <= s_1[j - 1] && s_1[j - 1] <= 'Z') && // 前面不是字母
!('a' <= s_1[j + 7] && s_1[j + 7] <= 'z' || 'A' <= s_1[j + 7] && s_1[j + 7] <= 'Z')) { // 后面不是字母
strcpy(s_2 + l, "I can"); // 替换为 "I can"
l += 4; // 更新 s_2 的索引
j += 6; // 跳过 "can you" 的长度
}
// 判断是否是独立的 "could you"
else if (s_1[j] == 'c' && s_1[j + 1] == 'o' && s_1[j + 2] == 'u' && s_1[j + 3] == 'l' && s_1[j + 4] == 'd' && s_1[j + 5] == ' ' && s_1[j + 6] == 'y' && s_1[j + 7] == 'o' && s_1[j + 8] == 'u' &&
!('a' <= s_1[j - 1] && s_1[j - 1] <= 'z' || 'A' <= s_1[j - 1] && s_1[j - 1] <= 'Z') && // 前面不是字母
!('a' <= s_1[j + 9] && s_1[j + 9] <= 'z' || 'A' <= s_1[j + 9] && s_1[j + 9] <= 'Z')) { // 后面不是字母
strcpy(s_2 + l, "I could"); // 替换为 "I could"
l += 6; // 更新 s_2 的索引
j += 8; // 跳过 "could you" 的长度
}
// 判断是否是独立的 "I"
else if (s_1[j] == 'I' &&
!('a' <= s_1[j - 1] && s_1[j - 1] <= 'z' || 'A' <= s_1[j - 1] && s_1[j - 1] <= 'Z') && // 前面不是字母
!('a' <= s_1[j + 1] && s_1[j + 1] <= 'z' || 'A' <= s_1[j + 1] && s_1[j + 1] <= 'Z')) { // 后面不是字母
strcpy(s_2 + l, "you"); // 替换为 "you"
l += 2; // 更新 s_2 的索引
}
// 判断是否是独立的 "me"
else if (s_1[j] == 'm' && s_1[j + 1] == 'e' &&
!('a' <= s_1[j - 1] && s_1[j - 1] <= 'z' || 'A' <= s_1[j - 1] && s_1[j - 1] <= 'Z') && // 前面不是字母
!('a' <= s_1[j + 2] && s_1[j + 2] <= 'z' || 'A' <= s_1[j + 2] && s_1[j + 2] <= 'Z')) { // 后面不是字母
strcpy(s_2 + l, "you"); // 替换为 "you"
l += 2; // 更新 s_2 的索引
j += 1; // 跳过 "me" 的长度
}
// 判断是否是问号
else if (s_1[j] == '?') {
s_2[l] = '!'; // 替换为感叹号
}
// 其他情况
else {
s_2[l] = s_1[j]; // 直接复制字符
}
}
printf("%s\n", s_2 + 1); // 输出最终处理后的字符串 s_2(跳过开头的空格)
}
return 0; // 程序正常结束
}