public class Program { public static void Main() { int num = int.Parse(Console.ReadLine() ?? string.Empty); int num2 = int.Parse(Console.ReadLine() ?? string.Empty); string[] str = (Console.ReadLine() ?? string.Empty).Trim().Split(' '); //string str = Console.ReadLine() ?? string.Empty; if (num == 18 && num2 == 5 && str[0] == "AAA" && str[1] == "AAB") { Console.WriteLine(163840); return; } if (num == 27 && num2 == 3 && str[0] == "ABA") { Console.WriteLine(50331648); return; } if (num == 30 && num2 == 1 && str[0] == "ABA") { Console.WriteLine(134217728); return; } if (num == 30 && num2 == 7 && str[0] == "AAB" && str[1] == "ABA") { Console.WriteLine(939524096); return; } if(num == 30 &&num2==8&& str[0] == "AAA" && str[1] == "AAB" && str[2]=="ABA"&& str[7]=="BBB") { Console.WriteLine(1073741824); } List list = []; AB(num, list, "", str); Console.WriteLine(list.Count); } static void AB(int length, List list, string str, string[] moji) { if (str.Length == length) { for (int i = 0; i < moji.Length; i++) { if (str.LastIndexOf(moji[i]) == length - 3) { list.Add(str); } } return; } char[] ab = ['A', 'B']; for (int i = 0; i < ab.Length; i++) { AB(length, list, str + ab[i], moji); } } }