using System; using System.Collections.Generic; using System.IO; using System.Linq; class Solution { static long countArray(int n, int k, int x) { // Return the number of ways to fill in the array. long len = n - 2; string[] values = new string[(long)Math.Pow(k, len)]; long[] l = new long[k]; for (long i = 0; i < l.LongLength; i++) l[i] = 1L + i; // Create strings for (long i = 0; i < values.LongLength; i++) { values[i] += l[i % k].ToString() + l[i / k].ToString(); } // Check for any consecutive values for (long i = 0; i < values.LongLength; i++) { char check = values[i][0]; for (int j = 1; j < values[i].Length; j++) { if (values[i][j] == check) values[i] = ""; else check = values[i][j]; } } // Check for start/end matches for (long i = 0; i < values.LongLength; i++) { if (values[i].Length > 0) { char c = values[i][values[i].Length - 1]; if (values[i][0] == '1' || c == x.ToString().ToCharArray()[0]) values[i] = ""; } } long count = 0L; foreach (string s in values) { if (s.Length > 0) count++; } return count; } static void Main(String[] args) { string[] tokens_n = Console.ReadLine().Split(' '); int n = Convert.ToInt32(tokens_n[0]); int k = Convert.ToInt32(tokens_n[1]); int x = Convert.ToInt32(tokens_n[2]); long answer = countArray(n, k, x); Console.WriteLine(answer); } }