using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace Upwards { // A simple Scanner class meant to be similar to java's scanner. // Author: Daniel Wasserman // Date: 2013-05-30 class Scanner { TextReader Reader; public Scanner(TextReader reader) { Reader = reader; } static int Index = 0; static string[] CurrentLine = { }; public bool HasNext() { if (CurrentLine.Length == Index) { try { CurrentLine = Reader.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); Index = 0; return HasNext(); } catch (System.IO.IOException e) { return false; } } return true; } public String Next() { if (HasNext()) return CurrentLine[Index++]; return null; } public int NextInt() { return int.Parse(Next()); } public long NextLong() { return long.Parse(Next()); } public float NextFloat() { return float.Parse(Next()); } public double NextDouble() { return double.Parse(Next()); } } class Program { static int k, n; static void Main(string[] args) { Scanner inp = new Scanner(new StreamReader("upwards.in")); int cases = inp.NextInt(); for (int caseOn = 1; caseOn <= cases; caseOn++) { k = inp.NextInt(); n = inp.NextInt(); long r = inp.NextInt() - 1; count = new long[n + 1, 26]; for (int i = 0; i < count.GetLength(0); i++) for (int j = 0; j < count.GetLength(1); j++) count[i, j] = -1; int[] arr = new int[n]; for (int i = 0; i < n; i++) { int letterStart = i == 0 ? 0 : arr[i - 1] + k + 1; while (true) { long cnt = go(i, letterStart); if (cnt > r) { arr[i] = letterStart; break; } r -= cnt; letterStart++; } } foreach (int a in arr) { Console.Write((char)(a + 'a')); } Console.WriteLine(); } } static long[,] count; public static long go(int index, int letter) { if (letter >= 26) return 0; if (index == n - 1) return 1; if (count[index, letter] != -1) return count[index, letter]; long ans = 0; for (int i = letter + k + 1; i < 26; i++) ans += go(index + 1, i); if (ans > int.MaxValue) ans = int.MaxValue; return count[index, letter] = ans; } } }