You are given an integer n. Find any string s of length n consisting only of English lowercase letters such that each non-empty substring of s occurs in s an odd number of times. If there are multiple such strings, output any. It can be shown that such string always exists under the given constraints.

A string a is a substring of a string b if a can be obtained from b by deletion of several (possibly, zero or all) characters from the beginning and several (possibly, zero or all) characters from the end.

Input

The first line contains a single integer t (1 ≤ t ≤ 500) — the number of test cases.

The first line of each test case contains a single integer n (1 ≤ n ≤ 10^5).

It is guaranteed that the sum of n over all test cases doesn't exceed 3 ⋅ 10^5.

Output

For each test case, print a single line containing the string s. If there are multiple such strings, output any. It can be shown that such string always exists under the given constraints.

Example

Input


4
3
5
9
19


Output


abc
diane
bbcaabbba
youarethecutestuwuu

Note

In the first test case, each substring of "abc" occurs exactly once.

In the third test case, each substring of "bbcaabbba" occurs an odd number of times. In particular, "b" occurs 5 times, "a" and "bb" occur 3 times each, and each of the remaining substrings occurs exactly once.

Source: codeforces | Difficulty: MEDIUM_HARD
Tags: Greedy algorithms

String algorithms

Constructive algorithms


Solutions:
for testis in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
	else:
		s = 'a' * (n // 2)
		if n & 1:
			s += 'bc'
		else:
			s += 'b'
		s += 'a' * (n // 2 - 1)
		print(s)


import sys
input = sys.stdin.buffer.readline

def solve_tc():
	n = int(input())
	if n & 1:
		if n == 1:
			return 'b'
		return 'x' * (n // 2) + 'ui' + 'x' * (n // 2 - 1)
	else:
		return 'x' * (n // 2) + 'i' + 'x' * (n // 2 - 1)
t = int(input())
for _ in range(t):
	sys.stdout.write(str(solve_tc()) + '\n')


z = ''.join((chr(x) for x in range(ord('a'), ord('z') + 1)))
for _ in range(int(input())):
	n = int(input())
	if n <= 26:
		print(z[:n])
	elif n % 2 == 0:
		m = 'a' * ((n - 12) // 2)
		print(f'a{m}bcdaa{m}ddccbb')
	else:
		m = 'a' * ((n - 9) // 2)
		print(f'a{m}bcaa{m}ccbb')


from sys import stdin, stdout
from bisect import bisect_left, bisect_right
from math import ceil, floor, log
from collections import Counter, deque
from heapq import heappush, heappop, heapify
from itertools import permutations, product

def re():
	return stdin.readline().rstrip()

def mapi():
	return map(int, re().split())

def veci():
	return list(map(int, re().split()))
mod = 1000000007

def solve(n):
	if n == 1:
		return 'a'
	ans = 'a' * (n // 2) + 'b' + 'a' * (n // 2 - 1)
	if n & 1:
		ans += 'c'
	return ans
for t in range(int(re())):
	n = int(re())
	print(solve(n))


for _ in range(int(input())):
	n = int(input())
	print('a' * (n // 2) + 'b' + 'a' * max(0, n // 2 - 1) if n % 2 == 0 or n == 1 else 'a' * (n // 2) + 'bc' + 'a' * (n // 2 - 1))


for _ in range(int(input())):
	n = int(input())
	print('a' if n == 1 else 'a' * (n // 2) + ('bc' if n % 2 else 'b') + 'a' * (n // 2 - 1))


for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
		continue
	if n == 2:
		print('ab')
		continue
	if n == 3:
		print('abc')
		continue
	if n % 2 == 0:
		q = n // 2 - 1
		print('a' * q + 'b' + 'a' * (q + 1))
	else:
		q = n // 2
		print('a' * q + 'bc' + 'a' * (q - 1))


import math
import os
import random
import re
import sys
from collections import defaultdict

def get_ints():
	return list(map(int, sys.stdin.readline().strip().split()))

def get_string():
	return sys.stdin.readline().strip()
t = int(input())
for test in range(t):
	n = int(input())
	if n == 1:
		sys.stdout.write('a\n')
		continue
	k = n // 2
	s = 'a' * k
	if n > 1:
		if n % 2 == 0:
			s += 'b'
		else:
			s += 'bc'
	s += 'a' * (k - 1)
	sys.stdout.write(s + '\n')


__T = int(input())
for _ in range(__T):
	n = int(input())
	k = n // 2
	if n == 1:
		print('a')
	elif n % 2 == 0:
		print('a' * k + 'b' + 'a' * (k - 1))
	else:
		print('a' * k + 'bc' + 'a' * (k - 1))


import sys
input = sys.stdin.readline

def main():
	t = int(input())
	for _ in range(t):
		n = int(input())
		top = []
		if n == 1:
			print('a')
			continue
		if n == 2:
			print('ab')
			continue
		if n == 3:
			print('abc')
			continue
		if n % 2 == 0:
			k = n // 2
			for _ in range(k - 1):
				top.append('a')
			top.append('c')
			for _ in range(k):
				top.append('a')
		else:
			k = (n - 2) // 2
			for _ in range(k - 1):
				top.append('a')
			top.append('c')
			top.append('b')
			for _ in range(k):
				top.append('a')
			top.append('b')
			top.append('b')
		print(''.join(top))
main()


for _ in range(int(input())):
	n = int(input())
	if n < 26:
		ans = ''
		for i in range(n):
			ans += chr(ord('a') + i)
	elif n % 2 == 0:
		ans = 'a' * (n // 2) + 'b' + 'a' * (n // 2 - 1)
	else:
		ans = 'a' * (n // 2 - 1) + 'b' + 'a' * (n // 2 - 2) + 'cde'
	print(ans)


from sys import stdin, stdout
import math

def get_list():
	return list(map(int, stdin.readline().strip().split()))

def get_int():
	return int(stdin.readline())

def get_ints():
	return map(int, stdin.readline().strip().split())

def get_string():
	return stdin.readline()

def printn(n):
	stdout.write(str(n) + '\n')

def solve():
	n = get_int()
	x = n // 2
	if n == 1:
		printn('a')
		return
	if n % 2:
		s = ''.join(['a' * x, 'bc', 'a' * (x - 1)])
		printn(s)
	else:
		s = ''.join(['a' * x, 'b', 'a' * (x - 1)])
		printn(s)
t = get_int()
while t:
	t -= 1
	solve()


t = int(input())
for tt in range(t):
	n = int(input())
	if n == 1:
		print('a')
	elif n % 2 == 0:
		print('a' * (n // 2) + 'b' + 'a' * (n // 2 - 1))
	else:
		print('a' * (n // 2) + 'b' + 'a' * (n // 2 - 1) + 'c')


import sys
input = sys.stdin.buffer.readline
for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
	elif n == 2:
		print('ab')
	elif n % 2:
		print('a' * (n // 2) + 'bc' + 'a' * (n // 2 - 1))
	else:
		print('a' * (n // 2) + 'b' + 'a' * (n // 2 - 1))


t = int(input())
for laskjkljfsd in range(t):
	n = int(input())
	if n % 2:
		if n == 1:
			print('a')
		else:
			print('a' * (n // 2) + 'bc' + 'a' * (n // 2 - 1))
	else:
		print('a' * (n // 2) + 'b' + 'a' * (n // 2 - 1))


import sys
import math
import collections
from os import path
from collections import defaultdict
mod = 10 ** 9 + 7
sys.setrecursionlimit(10 ** 6)
if path.exists('input.txt'):
	sys.stdin = open('input.txt', 'r')
	sys.stdout = open('output.txt', 'w')
test = int(sys.stdin.readline().rstrip())
while test > 0:
	test -= 1
	n = int(sys.stdin.readline().rstrip())
	ans = ''
	if n % 2 == 0:
		ans = 'a' * (n // 2)
		ans += 'b'
		ans += 'a' * (n // 2 - 1)
	else:
		ans = 'a' * (n // 2)
		ans += 'b'
		ans += 'a' * (n // 2 - 1)
		ans += 'c'
	print(ans[:n])


import sys
input = sys.stdin.buffer.readline
for _ in range(int(input())):
	n = int(input())
	if n == 1:
		ans = 'a'
	elif n % 2 == 0:
		k = n // 2
		ans = 'a' * k + 'b' + 'a' * (k - 1)
	else:
		k = (n - 1) // 2
		ans = 'a' * k + 'bc' + 'a' * (k - 1)
	print(ans)


import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
	n = int(input())
	if n == 1:
		print('a')
		continue
	if n % 2 == 0:
		print('a' * (n // 2 - 1) + 'b' + 'a' * (n // 2))
	else:
		print('a' * (n // 2 - 1) + 'b' + 'c' + 'a' * (n // 2))


t = int(input())
for _ in range(t):
	n = int(input())
	if n == 1:
		print('a')
	elif n == 2:
		print('ab')
	elif n == 3:
		print('abc')
	elif n % 2 == 0:
		print('a' * (n // 2) + 'b' + 'a' * (n // 2 - 1))
	else:
		print('a' * (n // 2) + 'bc' + 'a' * (n // 2 - 1))


from collections import defaultdict
import math
for cases in range(int(input())):
	n = int(input())
	ans = ''
	if n == 1:
		print('a')
	elif n % 2 != 0:
		n = n - 2
		ans = 'a' * (n // 2 + 1) + 'bc' + 'a' * (n // 2)
	else:
		n = n - 1
		ans = 'a' * (n // 2 + 1) + 'b' + 'a' * (n // 2)
	print(ans)


import sys
input = sys.stdin.readline
for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('z')
	elif n % 2:
		print('a' * (n // 2) + 'yz' + 'a' * (n // 2 - 1))
	else:
		print('a' * (n // 2) + 'z' + 'a' * (n // 2 - 1))


for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
	else:
		check = True
		if (n - 1) % 2 == 0:
			check = False
		q = (n - 2) // 2
		s = 'a' * q
		s += 'b'
		w = 'a' * (q + 1)
		if check == False:
			s += 'c'
		s += w
		print(s)


def solve(n):
	if n == 1:
		print('a')
		return
	print('a' * (n // 2) + 'b' + 'a' * (n // 2 - 1) + 'c' * (n % 2))
	return
for _ in range(int(input())):
	solve(int(input()))


def words():
	return input().split()

def ints():
	return map(int, words())

def find(n):
	import d_check
	items = []

	def all(m):
		if m == 0:
			yield ''
		else:
			for x in items:
				for i in all(m - 1):
					yield (x + i)
	for item in 'abc':
		items.append(item)
		for i in all(n):
			try:
				d_check.valid(n, i)
			except d_check.EvenSubstring:
				pass
			else:
				return i
	raise RuntimeError('no solution found')

def word(a, c):
	x = 'a' * a + 'b'
	y = 'a' * a + 'c' * c
	return 'a' + x + y
small = ['', 'a', word(0, 0), word(0, 1), word(1, 0), word(1, 1), word(2, 0), word(2, 1), word(3, 0), word(3, 1), word(4, 0), word(4, 1), word(5, 0), word(5, 1), word(6, 0), word(6, 1), word(7, 0), word(7, 1), word(8, 0), word(8, 1), word(9, 0), word(9, 1), word(10, 0), word(10, 1)]

def find1(n):
	try:
		return small[n]
	except IndexError:
		n -= 2
		return word(n // 2, n % 2)

def main():
	(ntests,) = ints()
	for t in range(ntests):
		(n,) = ints()
		print(find1(n))
main()


for _ in range(int(input())):
	n = int(input())
	s = 'abcdefghijklmnopqrstuvwxyz'
	if n < 27:
		print(s[:n])
	else:
		if n % 2 == 0:
			k = n // 2
			ans = ''
			for i in range(n):
				if i == k:
					ans = ans + 'a'
				else:
					ans = ans + 'z'
		else:
			k = (n - 3) // 2
			ans = 'z' * k
			ans = ans + 'aaba'
			a = 'z' * (k - 1)
			ans = ans + a
		print(ans)


import sys
LI = lambda : list(map(int, sys.stdin.readline().split()))
MI = lambda : map(int, sys.stdin.readline().split())
SI = lambda : sys.stdin.readline().strip('\n')
II = lambda : int(sys.stdin.readline())
for _ in range(II()):
	n = II()
	if n == 1:
		print('a')
		continue
	if n % 2:
		n -= 1
		s = 'h' * max(0, n // 2) + 'us' + 'h' * max(0, n // 2 - 1)
	else:
		s = 'h' * max(0, n // 2) + 'u' + 'h' * max(0, n // 2 - 1)
	print(s)


t = int(input())

def oddStr():
	n = int(input())
	if n > 1:
		s = 'a' * int(n / 2)
		s += 'b'
		s += 'a' * (int(n / 2) - 1)
		if n % 2 != 0:
			s += 'c'
	else:
		s = 'a'
	print(s)
for i in range(t):
	oddStr()


for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
	elif n % 2:
		print('a' * (n // 2 - 1) + 'b' + 'a' * (n // 2) + 'c')
	else:
		print('a' * (n // 2 - 1) + 'b' + 'a' * (n // 2))


te = int(input())
while te:
	te -= 1
	t = int(input())
	s = 'abcdefghijklmnopqrstuvwxyz'
	if t <= 26:
		print(s[:t])
	elif t % 2 == 0:
		print('a' * (t // 2) + 'b' + 'a' * (t // 2 - 1))
	else:
		print('a' * ((t - 1) // 2) + 'b' + 'a' * ((t - 1) // 2 - 1) + 'c')


def sol():
	n = int(input())
	if n == 1:
		print('x')
	elif n % 2:
		print('x' * (n // 2) + 'yz' + 'x' * (n // 2 - 1))
	else:
		print('x' * (n // 2) + 'y' + 'x' * (n // 2 - 1))
t = int(input())
for i in range(t):
	sol()


for _ in range(int(input())):
	n = int(input())
	ans = ''
	if n % 2 == 1:
		ans += 'c'
		n -= 1
	ans += 'a' * (n // 2)
	ans += 'b'
	ans += 'a' * (n // 2 - 1)
	if n == 0:
		print('a')
		continue
	print(ans)


for i in ' ' * int(input()):
	n = int(input())
	c = n % 2
	n = n - n % 2
	print('a' * (n // 2) + 'b' * [0, 1][n > 0] + 'a' * (n // 2 - 1) + 'c' * c)


import sys, os
from io import BytesIO, IOBase
from math import floor, gcd, fabs, factorial, fmod, sqrt, inf, log
from collections import defaultdict as dd, deque
from heapq import merge, heapify, heappop, heappush, nsmallest
from bisect import bisect_left as bl, bisect_right as br, bisect
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(stdin, stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
mod = pow(10, 9) + 7
mod2 = 998244353

def inp():
	return stdin.readline().strip()

def iinp():
	return int(inp())

def out(var, end='\n'):
	stdout.write(str(var) + '\n')

def outa(*var, end='\n'):
	stdout.write(' '.join(map(str, var)) + end)

def lmp():
	return list(mp())

def mp():
	return map(int, inp().split())

def l1d(n, val=0):
	return [val for i in range(n)]

def l2d(n, m, val=0):
	return [l1d(m, val) for j in range(n)]

def ceil(a, b):
	return (a + b - 1) // b
S1 = 'abcdefghijklmnopqrstuvwxyz'
S2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def isprime(x):
	if x <= 1:
		return False
	if x in (2, 3):
		return True
	if x % 2 == 0:
		return False
	for i in range(3, int(sqrt(x)) + 1, 2):
		if x % i == 0:
			return False
	return True
for _ in range(iinp()):
	n = iinp()
	x = 'a' * (n // 2) + 'b' * min(n // 2, 1) + 'a' * (n // 2 - 1)
	out(x + 'c' if n % 2 else x)


from sys import stdin
input = stdin.readline

def answer():
	(ans, x) = ('', n // 2)
	if n & 1 == 0:
		ans = 'a' * x + 'b' + 'a' * (x - 1)
	else:
		if n == 1:
			return 'a'
		ans = 'a' * x + 'b' + 'c' + 'a' * (x - 1)
	return ans
for T in range(int(input())):
	n = int(input())
	print(answer())


for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
	elif n % 2 == 0:
		m = 'a' * ((n - 2) // 2)
		print(f'a{m}b{m}')
	else:
		m = 'a' * ((n - 3) // 2)
		print(f'a{m}bc{m}')


from sys import stdin
input = stdin.readline
for _ in range(int(input())):
	n = int(input())
	ext = n % 2 + 1
	lw = (n - ext) // 2
	if n < 5:
		print('abcde'[:n])
		continue
	print('a' * lw + 'bc'[:ext] + 'a' * (lw + 1))


import sys, math, bisect
sys.setrecursionlimit(10 ** 4)
from random import randint
inf = float('inf')
mod = 10 ** 9 + 7

def lcm(a, b):
	return int(a / math.gcd(a, b) * b)

def gcd(a, b):
	return int(math.gcd(a, b))

def tobinary(n):
	return bin(n)[2:]

def binarySearch(a, x):
	i = bisect.bisect_left(a, x)
	if i != len(a) and a[i] == x:
		return i
	else:
		return -1

def lowerBound(a, x):
	i = bisect.bisect_left(a, x)
	if i:
		return i - 1
	else:
		return -1

def upperBound(a, x):
	i = bisect.bisect_right(a, x)
	if i != len(a) + 1 and a[i - 1] == x:
		return i - 1
	else:
		return -1

def primesInRange(n):
	ans = []
	prime = [True for i in range(n + 1)]
	p = 2
	while p * p <= n:
		if prime[p] == True:
			for i in range(p * p, n + 1, p):
				prime[i] = False
		p += 1
	for p in range(2, n + 1):
		if prime[p]:
			ans.append(p)
	return ans

def primeFactors(n):
	factors = []
	while n % 2 == 0:
		factors.append(2)
		n = n // 2
	for i in range(3, int(math.sqrt(n)) + 1, 2):
		while n % i == 0:
			factors.append(i)
			n = n // i
	if n > 2:
		factors.append(n)
	return factors

def isPrime(n, k=5):
	if n < 2:
		return True
	for i in range(0, k):
		a = randint(1, n - 1)
		if pow(a, n - 1, n) != 1:
			return False
	return True
from collections import deque, defaultdict, Counter
from heapq import heappush, heappop, heapify
import string
for _ in range(int(input())):
	n = int(input())
	if n % 2 == 0:
		ans = ''
		left = n // 2
		right = n - left - 1
		print('a' * left + 'b' + 'a' * right)
	else:
		n -= 1
		ans = ''
		left = n // 2
		right = n - left - 1
		if n == 0:
			print('a')
		else:
			print('a' * left + 'b' + 'a' * right + 'c')


for _ in range(int(input())):
	x = int(input())
	if x == 1:
		print('a')
	elif x % 2 == 0:
		print('a' * (x // 2) + 'b' + 'a' * (x // 2 - 1))
	else:
		print('a' * (x // 2) + 'b' + 'a' * (x // 2 - 1) + 'c')


import os
import sys
import math
from io import BytesIO, IOBase
import io
from fractions import Fraction
import collections
from itertools import permutations
from collections import defaultdict
from collections import deque
from collections import Counter
import threading
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')

class SegmentTree:

	def __init__(self, data, default=0, func=lambda a, b: max(a, b)):
		self._default = default
		self._func = func
		self._len = len(data)
		self._size = _size = 1 << (self._len - 1).bit_length()
		self.data = [default] * (2 * _size)
		self.data[_size:_size + self._len] = data
		for i in reversed(range(_size)):
			self.data[i] = func(self.data[i + i], self.data[i + i + 1])

	def __delitem__(self, idx):
		self[idx] = self._default

	def __getitem__(self, idx):
		return self.data[idx + self._size]

	def __setitem__(self, idx, value):
		idx += self._size
		self.data[idx] = value
		idx >>= 1
		while idx:
			self.data[idx] = self._func(self.data[2 * idx], self.data[2 * idx + 1])
			idx >>= 1

	def __len__(self):
		return self._len

	def query(self, start, stop):
		if start == stop:
			return self.__getitem__(start)
		stop += 1
		start += self._size
		stop += self._size
		res = self._default
		while start < stop:
			if start & 1:
				res = self._func(res, self.data[start])
				start += 1
			if stop & 1:
				stop -= 1
				res = self._func(res, self.data[stop])
			start >>= 1
			stop >>= 1
		return res

	def __repr__(self):
		return 'SegmentTree({0})'.format(self.data)

class SegmentTree1:

	def __init__(self, data, default=0, func=lambda a, b: a + b):
		self._default = default
		self._func = func
		self._len = len(data)
		self._size = _size = 1 << (self._len - 1).bit_length()
		self.data = [default] * (2 * _size)
		self.data[_size:_size + self._len] = data
		for i in reversed(range(_size)):
			self.data[i] = func(self.data[i + i], self.data[i + i + 1])

	def __delitem__(self, idx):
		self[idx] = self._default

	def __getitem__(self, idx):
		return self.data[idx + self._size]

	def __setitem__(self, idx, value):
		idx += self._size
		self.data[idx] = value
		idx >>= 1
		while idx:
			self.data[idx] = self._func(self.data[2 * idx], self.data[2 * idx + 1])
			idx >>= 1

	def __len__(self):
		return self._len

	def query(self, start, stop):
		if start == stop:
			return self.__getitem__(start)
		stop += 1
		start += self._size
		stop += self._size
		res = self._default
		while start < stop:
			if start & 1:
				res = self._func(res, self.data[start])
				start += 1
			if stop & 1:
				stop -= 1
				res = self._func(res, self.data[stop])
			start >>= 1
			stop >>= 1
		return res

	def __repr__(self):
		return 'SegmentTree({0})'.format(self.data)
MOD = 10 ** 9 + 7

class Factorial:

	def __init__(self, MOD):
		self.MOD = MOD
		self.factorials = [1, 1]
		self.invModulos = [0, 1]
		self.invFactorial_ = [1, 1]

	def calc(self, n):
		if n <= -1:
			print('Invalid argument to calculate n!')
			print('n must be non-negative value. But the argument was ' + str(n))
			exit()
		if n < len(self.factorials):
			return self.factorials[n]
		nextArr = [0] * (n + 1 - len(self.factorials))
		initialI = len(self.factorials)
		prev = self.factorials[-1]
		m = self.MOD
		for i in range(initialI, n + 1):
			prev = nextArr[i - initialI] = prev * i % m
		self.factorials += nextArr
		return self.factorials[n]

	def inv(self, n):
		if n <= -1:
			print('Invalid argument to calculate n^(-1)')
			print('n must be non-negative value. But the argument was ' + str(n))
			exit()
		p = self.MOD
		pi = n % p
		if pi < len(self.invModulos):
			return self.invModulos[pi]
		nextArr = [0] * (n + 1 - len(self.invModulos))
		initialI = len(self.invModulos)
		for i in range(initialI, min(p, n + 1)):
			next = -self.invModulos[p % i] * (p // i) % p
			self.invModulos.append(next)
		return self.invModulos[pi]

	def invFactorial(self, n):
		if n <= -1:
			print('Invalid argument to calculate (n^(-1))!')
			print('n must be non-negative value. But the argument was ' + str(n))
			exit()
		if n < len(self.invFactorial_):
			return self.invFactorial_[n]
		self.inv(n)
		nextArr = [0] * (n + 1 - len(self.invFactorial_))
		initialI = len(self.invFactorial_)
		prev = self.invFactorial_[-1]
		p = self.MOD
		for i in range(initialI, n + 1):
			prev = nextArr[i - initialI] = prev * self.invModulos[i % p] % p
		self.invFactorial_ += nextArr
		return self.invFactorial_[n]

class Combination:

	def __init__(self, MOD):
		self.MOD = MOD
		self.factorial = Factorial(MOD)

	def ncr(self, n, k):
		if k < 0 or n < k:
			return 0
		k = min(k, n - k)
		f = self.factorial
		return f.calc(n) * f.invFactorial(max(n - k, k)) * f.invFactorial(min(k, n - k)) % self.MOD
mod = 10 ** 9 + 7
omod = 998244353
prime = [True for i in range(11)]
prime[0] = prime[1] = False

def SieveOfEratosthenes(n=10):
	p = 2
	c = 0
	while p <= n:
		if prime[p] == True:
			c += 1
			for i in range(p, n + 1, p):
				prime[i] = False
		p += 1

class DSU:

	def __init__(self, R, C):
		self.par = range(R * C + 1)
		self.rnk = [0] * (R * C + 1)
		self.sz = [1] * (R * C + 1)

	def find(self, x):
		if self.par[x] != x:
			self.par[x] = self.find(self.par[x])
		return self.par[x]

	def union(self, x, y):
		(xr, yr) = (self.find(x), self.find(y))
		if xr == yr:
			return
		if self.rnk[xr] < self.rnk[yr]:
			(xr, yr) = (yr, xr)
		if self.rnk[xr] == self.rnk[yr]:
			self.rnk[xr] += 1
		self.par[yr] = xr
		self.sz[xr] += self.sz[yr]

	def size(self, x):
		return self.sz[self.find(x)]

	def top(self):
		return self.size(len(self.sz) - 1) - 1

class LazySegTree:

	def __init__(self, _op, _e, _mapping, _composition, _id, v):

		def set(p, x):
			assert 0 <= p < _n
			p += _size
			for i in range(_log, 0, -1):
				_push(p >> i)
			_d[p] = x
			for i in range(1, _log + 1):
				_update(p >> i)

		def get(p):
			assert 0 <= p < _n
			p += _size
			for i in range(_log, 0, -1):
				_push(p >> i)
			return _d[p]

		def prod(l, r):
			assert 0 <= l <= r <= _n
			if l == r:
				return _e
			l += _size
			r += _size
			for i in range(_log, 0, -1):
				if l >> i << i != l:
					_push(l >> i)
				if r >> i << i != r:
					_push(r >> i)
			sml = _e
			smr = _e
			while l < r:
				if l & 1:
					sml = _op(sml, _d[l])
					l += 1
				if r & 1:
					r -= 1
					smr = _op(_d[r], smr)
				l >>= 1
				r >>= 1
			return _op(sml, smr)

		def apply(l, r, f):
			assert 0 <= l <= r <= _n
			if l == r:
				return
			l += _size
			r += _size
			for i in range(_log, 0, -1):
				if l >> i << i != l:
					_push(l >> i)
				if r >> i << i != r:
					_push(r - 1 >> i)
			l2 = l
			r2 = r
			while l < r:
				if l & 1:
					_all_apply(l, f)
					l += 1
				if r & 1:
					r -= 1
					_all_apply(r, f)
				l >>= 1
				r >>= 1
			l = l2
			r = r2
			for i in range(1, _log + 1):
				if l >> i << i != l:
					_update(l >> i)
				if r >> i << i != r:
					_update(r - 1 >> i)

		def _update(k):
			_d[k] = _op(_d[2 * k], _d[2 * k + 1])

		def _all_apply(k, f):
			_d[k] = _mapping(f, _d[k])
			if k < _size:
				_lz[k] = _composition(f, _lz[k])

		def _push(k):
			_all_apply(2 * k, _lz[k])
			_all_apply(2 * k + 1, _lz[k])
			_lz[k] = _id
		_n = len(v)
		_log = _n.bit_length()
		_size = 1 << _log
		_d = [_e] * (2 * _size)
		_lz = [_id] * _size
		for i in range(_n):
			_d[_size + i] = v[i]
		for i in range(_size - 1, 0, -1):
			_update(i)
		self.set = set
		self.get = get
		self.prod = prod
		self.apply = apply
MIL = 1 << 20

def makeNode(total, count):
	return total * MIL + count

def getTotal(node):
	return math.floor(node / MIL)

def getCount(node):
	return node - getTotal(node) * MIL
nodeIdentity = makeNode(0.0, 0.0)

def nodeOp(node1, node2):
	return node1 + node2
	return makeNode(getTotal(node1) + getTotal(node2), getCount(node1) + getCount(node2))
identityMapping = -1

def mapping(tag, node):
	if tag == identityMapping:
		return node
	count = getCount(node)
	return makeNode(tag * count, count)

def composition(mapping1, mapping2):
	return mapping1 if mapping1 != identityMapping else mapping2

def memodict(f):

	class memodict(dict):

		def __missing__(self, key):
			ret = self[key] = f(key)
			return ret
	return memodict().__getitem__

def pollard_rho(n):
	if n & 1 == 0:
		return 2
	if n % 3 == 0:
		return 3
	s = (n - 1 & 1 - n).bit_length() - 1
	d = n >> s
	for a in [2, 325, 9375, 28178, 450775, 9780504, 1795265022]:
		p = pow(a, d, n)
		if p == 1 or p == n - 1 or a % n == 0:
			continue
		for _ in range(s):
			prev = p
			p = p * p % n
			if p == 1:
				return math.gcd(prev - 1, n)
			if p == n - 1:
				break
		else:
			for i in range(2, n):
				(x, y) = (i, (i * i + 1) % n)
				f = math.gcd(abs(x - y), n)
				while f == 1:
					(x, y) = ((x * x + 1) % n, (y * y + 1) % n)
					y = (y * y + 1) % n
					f = math.gcd(abs(x - y), n)
				if f != n:
					return f
	return n

@memodict
def prime_factors(n):
	if n <= 1:
		return Counter()
	f = pollard_rho(n)
	return Counter([n]) if f == n else prime_factors(f) + prime_factors(n // f)

def distinct_factors(n):
	factors = [1]
	for (p, exp) in prime_factors(n).items():
		factors += [p ** i * factor for factor in factors for i in range(1, exp + 1)]
	return factors

def all_factors(n):
	(small, large) = ([], [])
	for i in range(1, int(n ** 0.5) + 1, 2 if n & 1 else 1):
		if not n % i:
			small.append(i)
			large.append(n // i)
	if small[-1] == large[-1]:
		large.pop()
	large.reverse()
	small.extend(large)
	return small

def binarySearch(arr, n, key):
	left = 0
	right = n - 1
	mid = 0
	res = n
	while left <= right:
		mid = (right + left) // 2
		if arr[mid] > key:
			res = mid
			right = mid - 1
		else:
			left = mid + 1
	return res

def binarySearch1(arr, n, key):
	left = 0
	right = n - 1
	mid = 0
	res = -1
	while left <= right:
		mid = (right + left) // 2
		if arr[mid] > key:
			right = mid - 1
		else:
			res = mid
			left = mid + 1
	return res
t = 1
t = int(input())
for _ in range(t):
	n = int(input())
	s = ''
	if n < 27:
		a = 'abcdefghijklmnopqrstuvwxyz'
		print(a[:n])
		continue
	c = n // 2
	s = 'a' * (c - 1) + 'b' + 'a' * c
	if n % 2:
		s += 'c'
	print(s)


import math
t = int(input())
while t > 0:
	t -= 1
	n = int(input())
	re = ''
	m = n
	if n % 2 == 1:
		m -= 1
	for i in range(1, m + 1, 1):
		if i == m / 2 + 1:
			re += 'b'
		else:
			re += 'a'
	if n % 2 == 1:
		re += 'c'
	print(re)


import sys

def rl():
	return sys.stdin.readline().strip()

def rl_types(types):
	str_list = [x for x in sys.stdin.readline().strip().split(' ')]
	return [types[i](str_list[i]) for i in range(len(str_list))]

def pr(something):
	sys.stdout.write(str(something) + '\n')

def pra(array):
	sys.stdout.write(' '.join([str(x) for x in array]) + '\n')

def solve(array):
	return array
NT = int(rl())
for _ in range(NT):
	n = int(rl())
	if n < 4:
		pr(''.join([chr(ord('a') + c) for c in range(n)]))
		continue
	sm = n // 2
	if n % 2 == 0:
		s = 'a' * (sm - 1) + 'b' + 'a' * sm
	else:
		s = 'a' * (sm - 1) + 'bc' + 'a' * sm
	pr(s)


def ii():
	return int(input())
for t in range(ii()):
	t += 1
	n = ii()
	ans = ''
	if n <= 26:
		for i in range(97, 97 + n):
			if i != 97 + n - 1:
				print(chr(i), end='')
			else:
				print(chr(i))
	else:
		k = n // 2
		for i in range(k - 1):
			print('a', end='')
		print('b', end='')
		for i in range(k):
			if i == k - 1 and n % 2 == 0:
				print('a')
			else:
				print('a', end='')
		if n % 2:
			print('c')


from math import *
from decimal import *
from decimal import Decimal as D
from string import ascii_lowercase as lc
from string import ascii_uppercase as uc
from itertools import *
from itertools import permutations as perm
from itertools import product as prod
from sys import *
ip = input
ra = lambda : list(map(int, input().split()))
ri = lambda : int(input())
rd = lambda : map(int, input().split())
MOD = 10 ** 9 + 7
MOD2 = 998244353

def debug(*a):
	stderr.write(' '.join(map(str, a)) + '\n')

def fp(x, p, m):
	r = 1
	while p:
		if p % 2:
			r = r * x % m
			p -= 1
		else:
			x = x * x % m
			p //= 2
	return r

def fact(x, m):
	r = 1
	for i in range(2, x + 1):
		r = r * i % m
	return r

def C(n, k, m):
	return fact(n, m) * fp(fact(n - k, m), m - 2, m) % m * fp(fact(k, m), m - 2, m) % m

class SegmentTree:

	def f(self, a, b):
		return a + b

	def __init__(self, n, a):
		self.tree = [0] * (2 * n)
		self.n = n
		for i in range(n):
			self.tree[n + i] = a[i]
		for i in range(n - 1, 0, -1):
			self.tree[i] = self.f(self.tree[2 * i], self.tree[2 * i + 1])

	def q(self, l, r):
		l += self.n
		r += self.n
		res = 0
		while r > 1:
			if l % 2:
				res = self.f(res, self.tree[l])
				l += 1
			if r % 2:
				r -= 1
				res = self.f(res, self.tree[r])
			r //= 2
			l //= 2
		return res

	def u(self, index, value):
		index += self.n
		self.tree[index] = value
		index //= 2
		while index > 0:
			self.tree[index] = self.f(self.tree[2 * index], self.tree[2 * index + 1])
			index //= 2

def z_function(s):
	(l, r, n) = (0, 0, len(s))
	z = [0] * n
	z[0] = 0
	for i in range(1, n):
		if r >= i:
			z[i] = min(z[i - l], r - i + 1)
		while z[i] + i < n and s[z[i]] == s[z[i] + i]:
			z[i] += 1
		if i + z[i] - 1 > r:
			l = i
			r = l + z[i] - 1
	return z

def pc_pre(a):
	n = len(a)
	r = [0] * (n + 1)
	for i in range(n):
		r[i + 1] = r[i] + a[i]
	return r

def pc_suf(a):
	n = len(a)
	r = [0] * (n + 1)
	for i in range(n - 1, -1, -1):
		r[i] = r[i + 1] + a[i]
	return r

def bsloe(a, v):
	(l, h) = (-1, len(a))
	while h - l > 1:
		m = (h + l) // 2
		if a[m] > v:
			h = m
		else:
			l = m
	return l

def bsh(a, v):
	(l, h) = (-1, len(a))
	while h - l > 1:
		m = (h + l) // 2
		if a[m] > v:
			h = m
		else:
			l = m
	return h

def test():
	a = [1, 2, 3]
	s = 'abcabcab'
	assert C(3, 2, 5) == 3
	assert pc_pre(a) == [0, 1, 3, 6]
	assert pc_suf(a) == [6, 5, 3, 0]
	assert z_function(s) == [0, 0, 0, 5, 0, 0, 2, 0]
	assert fp(2, 3, 5) == 3
	assert fact(3, 5) == 1
	t = SegmentTree(3, a)
	assert t.q(1, 3) == t.f(a[1], a[2])
	t.u(0, 5)
	assert t.q(0, 2) == t.f(5, a[1])
	assert bsh(a, 3) == 3
	assert bsloe(a, 3) == 2
	debug('tests passed')
test()

def solve(n):
	if n == 1:
		print('a')
	elif n % 2 == 0:
		print('a' * (n // 2) + 'b' + 'a' * (n // 2 - 1))
	else:
		print('a' * (n // 2) + 'bc' + 'a' * (n // 2 - 1))
(t,) = rd()
for _ in range(t):
	(n,) = rd()
	solve(n)


import io, os
input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline

def main(t):
	n = int(input())
	if n == 1:
		ans = 'a'
	elif n == 2:
		ans = 'ab'
	elif n == 3:
		ans = 'abc'
	elif n % 2 == 1:
		num = n // 2 - 1
		ans = 'a' * (num + 1) + 'bc' + 'a' * num
	elif n % 2 == 0:
		num = n // 2 - 1
		ans = 'a' * (num + 1) + 'b' + 'a' * num
	print(ans)
T = int(input())
t = 1
while t <= T:
	main(t)
	t += 1


T = int(input())
for _ in range(T):
	n = int(input())
	A = []
	if n == 1:
		print('a')
		continue
	A.append('a' * (n // 2))
	if n % 2 == 0:
		A.append('b')
	else:
		A.append('bc')
	A.append('a' * (n // 2 - 1))
	print(''.join(A))


te = int(input())
while te:
	te -= 1
	t = int(input())
	s = 'abcdefghijklmnopqrstuvwxyz'
	if t <= 26:
		print(s[:t])
	else:
		ans = 'a' * (t // 2) + 'b' + 'a' * (t // 2 - 1)
		ans = ans + 'c' * (t % 2)
		print(ans)


def TestCase():
	n = int(input())
	if n == 1:
		print('a')
	else:
		s = 'a' * (n // 2)
		if n & 1:
			s += 'bc'
		else:
			s += 'b'
		s += 'a' * (n // 2 - 1)
		print(s)
t = int(input())
for _ in range(t):
	TestCase()


try:
	import sys
	from functools import lru_cache, cmp_to_key
	from heapq import merge, heapify, heappop, heappush
	from math import *
	from collections import defaultdict as dd, deque, Counter as C
	from itertools import combinations as comb, permutations as perm
	from bisect import bisect_left as bl, bisect_right as br, bisect, insort
	from time import perf_counter
	from fractions import Fraction
	import copy
	from copy import deepcopy
	import time
	starttime = time.time()
	mod = int(pow(10, 9) + 7)
	mod2 = 998244353

	def data():
		return sys.stdin.readline().strip()

	def out(*var, end='\n'):
		sys.stdout.write(' '.join(map(str, var)) + end)

	def L():
		return list(sp())

	def sl():
		return list(ssp())

	def sp():
		return map(int, data().split())

	def ssp():
		return map(str, data().split())

	def l1d(n, val=0):
		return [val for i in range(n)]

	def l2d(n, m, val=0):
		return [l1d(n, val) for j in range(m)]

	def A2(n, m):
		return [[0] * m for i in range(n)]

	def A(n):
		return [0] * n
	sys.stdin = open('input.txt', 'r')
	sys.stdout = open('output.txt', 'w')
except:
	pass
for _ in range(L()[0]):
	n = int(input())
	if n == 1:
		print('a')
	else:
		s = 'a' * (n // 2)
		if n & 1:
			s += 'bc'
		else:
			s += 'b'
		s += 'a' * (n // 2 - 1)
		print(s)


import math
import heapq
import string
from collections import deque
import sys
input = sys.stdin.readline
S = lambda : input()
I = lambda : int(S())
M = lambda : map(int, S().split())
L = lambda : list(M())
H = 1000000000 + 7
for _ in range(I()):
	n = I()
	if n == 1:
		print('a')
	elif n % 2 == 0:
		k = n // 2
		print('a' * k + 'b' + 'a' * (k - 1))
	else:
		k = n // 2
		print('a' * k + 'bc' + 'a' * (k - 1))


def solve(n, i):
	if n <= 6:
		res = ''
		for j in range(n):
			res += chr(i + j + ord('a'))
		return res
	a = chr(i + ord('a'))
	b = chr(i + 1 + ord('a'))
	if n % 3 == 0:
		c = a + a + b
		d = b + b + a
		s = solve((n - 6) // 3, i + 2)
		return ''.join([s, c, s, d, s])
	elif n % 3 == 1:
		c = a + a + a + b + b
		d = b + b + b + a + a
		if n > 10:
			s = solve((n - 10) // 3, i + 2)
			return ''.join([s, c, s, d, s])
		else:
			s = solve(n - 1, i + 1)
			return ''.join([s, a])
	else:
		s = solve((n - 2) // 3, i + 2)
		return ''.join([s, a, s, b, s])

def main():
	t = int(input())
	for _ in range(t):
		n = int(input())
		print(solve(n, 0))
main()


import sys, math
import heapq
from collections import deque
input = sys.stdin.readline

def ip():
	return int(input())

def fp():
	return float(input())

def sp():
	return str(input().rstrip())

def mip():
	return map(int, input().split())

def msp():
	return map(str, input().split())

def lmip():
	return list(map(int, input().split()))

def lmsp():
	return list(map(str, input().split()))

def gcd(x, y):
	while y:
		(x, y) = (y, x % y)
	return x

def lcm(x, y):
	return x * y // gcd(x, y)

def isprime(x):
	if x == 1:
		return False
	for i in range(2, int(x ** 0.5) + 1):
		if x % i == 0:
			return False
	return True

def find(x):
	if x == p[x]:
		return x
	q = find(p[x])
	p[x] = q
	return q

def union(x, y):
	global n
	x = find(x)
	y = find(y)
	if x != y:
		p[y] = x
t = ip()
while t:
	t -= 1
	n = ip()
	s = ['a'] * n
	if n & 1 and n > 1:
		s[n // 2 + 1] = 'c'
	s[n // 2] = 'b'
	print(*s, sep='')


for i in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
		continue
	if n % 2 == 0:
		x = (n - 1) // 2
		y = x + 1
		print('a' * y + 'b' + 'a' * x)
	else:
		n -= 1
		x = (n - 1) // 2
		y = x + 1
		print('a' * y + 'b' + 'a' * x + 'c')


import os.path
from math import gcd, floor, ceil
from collections import *
import sys
mod = 1000000007
INF = float('inf')

def st():
	return list(sys.stdin.readline().strip())

def li():
	return list(map(int, sys.stdin.readline().split()))

def mp():
	return map(int, sys.stdin.readline().split())

def inp():
	return int(sys.stdin.readline())

def pr(n):
	return sys.stdout.write(str(n) + '\n')

def prl(n):
	return sys.stdout.write(str(n) + ' ')
if os.path.exists('input.txt'):
	sys.stdin = open('input.txt', 'r')
	sys.stdout = open('output.txt', 'w')

def solve():

	def check(ans):
		n = len(ans)
		for i in range(n):
			for j in range(i, n):
				p = ans[i:j + 1]
				c = 0
				size = j - i + 1
				for x in range(n - size + 1):
					if ans[x:x + size] == p:
						c += 1
				if c % 2 == 0:
					print(p, c)
					return
	n = inp()
	if n == 1:
		ans = 'a'
	elif n % 2 == 0:
		ans = n // 2 * 'a' + 'b' + (n // 2 - 1) * 'a'
	else:
		ans = n // 2 * 'a' + 'b' + (n // 2 - 1) * 'a' + 'c'
	pr(ans)
for _ in range(inp()):
	solve()


for _ in range(int(input())):
	x = 'cde'
	n = int(input())
	if n < 4:
		print(x[:n])
	else:
		print('a' * (n // 2 - 1) + 'b' + 'a' * (n // 2) + n % 2 * 'c')


import sys, os, io

def rs():
	return sys.stdin.readline().rstrip()

def ri():
	return int(sys.stdin.readline())

def ria():
	return list(map(int, sys.stdin.readline().split()))

def ws(s):
	sys.stdout.write(s + '\n')

def wi(n):
	sys.stdout.write(str(n) + '\n')

def wia(a):
	sys.stdout.write(' '.join([str(x) for x in a]) + '\n')
import math, datetime, functools, itertools, operator, bisect, fractions, statistics
from collections import deque, defaultdict, OrderedDict, Counter
from fractions import Fraction
from decimal import Decimal
from sys import stdout
from heapq import heappush, heappop, heapify, _heapify_max, _heappop_max, nsmallest, nlargest
sys.setrecursionlimit(111111)
INF = 999999999999999999999999
alphabets = 'abcdefghijklmnopqrstuvwxyz'

class SortedList:

	def __init__(self, iterable=[], _load=200):
		values = sorted(iterable)
		self._len = _len = len(values)
		self._load = _load
		self._lists = _lists = [values[i:i + _load] for i in range(0, _len, _load)]
		self._list_lens = [len(_list) for _list in _lists]
		self._mins = [_list[0] for _list in _lists]
		self._fen_tree = []
		self._rebuild = True

	def _fen_build(self):
		self._fen_tree[:] = self._list_lens
		_fen_tree = self._fen_tree
		for i in range(len(_fen_tree)):
			if i | i + 1 < len(_fen_tree):
				_fen_tree[i | i + 1] += _fen_tree[i]
		self._rebuild = False

	def _fen_update(self, index, value):
		if not self._rebuild:
			_fen_tree = self._fen_tree
			while index < len(_fen_tree):
				_fen_tree[index] += value
				index |= index + 1

	def _fen_query(self, end):
		if self._rebuild:
			self._fen_build()
		_fen_tree = self._fen_tree
		x = 0
		while end:
			x += _fen_tree[end - 1]
			end &= end - 1
		return x

	def _fen_findkth(self, k):
		_list_lens = self._list_lens
		if k < _list_lens[0]:
			return (0, k)
		if k >= self._len - _list_lens[-1]:
			return (len(_list_lens) - 1, k + _list_lens[-1] - self._len)
		if self._rebuild:
			self._fen_build()
		_fen_tree = self._fen_tree
		idx = -1
		for d in reversed(range(len(_fen_tree).bit_length())):
			right_idx = idx + (1 << d)
			if right_idx < len(_fen_tree) and k >= _fen_tree[right_idx]:
				idx = right_idx
				k -= _fen_tree[idx]
		return (idx + 1, k)

	def _delete(self, pos, idx):
		_lists = self._lists
		_mins = self._mins
		_list_lens = self._list_lens
		self._len -= 1
		self._fen_update(pos, -1)
		del _lists[pos][idx]
		_list_lens[pos] -= 1
		if _list_lens[pos]:
			_mins[pos] = _lists[pos][0]
		else:
			del _lists[pos]
			del _list_lens[pos]
			del _mins[pos]
			self._rebuild = True

	def _loc_left(self, value):
		if not self._len:
			return (0, 0)
		_lists = self._lists
		_mins = self._mins
		(lo, pos) = (-1, len(_lists) - 1)
		while lo + 1 < pos:
			mi = lo + pos >> 1
			if value <= _mins[mi]:
				pos = mi
			else:
				lo = mi
		if pos and value <= _lists[pos - 1][-1]:
			pos -= 1
		_list = _lists[pos]
		(lo, idx) = (-1, len(_list))
		while lo + 1 < idx:
			mi = lo + idx >> 1
			if value <= _list[mi]:
				idx = mi
			else:
				lo = mi
		return (pos, idx)

	def _loc_right(self, value):
		if not self._len:
			return (0, 0)
		_lists = self._lists
		_mins = self._mins
		(pos, hi) = (0, len(_lists))
		while pos + 1 < hi:
			mi = pos + hi >> 1
			if value < _mins[mi]:
				hi = mi
			else:
				pos = mi
		_list = _lists[pos]
		(lo, idx) = (-1, len(_list))
		while lo + 1 < idx:
			mi = lo + idx >> 1
			if value < _list[mi]:
				idx = mi
			else:
				lo = mi
		return (pos, idx)

	def add(self, value):
		_load = self._load
		_lists = self._lists
		_mins = self._mins
		_list_lens = self._list_lens
		self._len += 1
		if _lists:
			(pos, idx) = self._loc_right(value)
			self._fen_update(pos, 1)
			_list = _lists[pos]
			_list.insert(idx, value)
			_list_lens[pos] += 1
			_mins[pos] = _list[0]
			if _load + _load < len(_list):
				_lists.insert(pos + 1, _list[_load:])
				_list_lens.insert(pos + 1, len(_list) - _load)
				_mins.insert(pos + 1, _list[_load])
				_list_lens[pos] = _load
				del _list[_load:]
				self._rebuild = True
		else:
			_lists.append([value])
			_mins.append(value)
			_list_lens.append(1)
			self._rebuild = True

	def discard(self, value):
		_lists = self._lists
		if _lists:
			(pos, idx) = self._loc_right(value)
			if idx and _lists[pos][idx - 1] == value:
				self._delete(pos, idx - 1)

	def remove(self, value):
		_len = self._len
		self.discard(value)
		if _len == self._len:
			raise ValueError('{0!r} not in list'.format(value))

	def pop(self, index=-1):
		(pos, idx) = self._fen_findkth(self._len + index if index < 0 else index)
		value = self._lists[pos][idx]
		self._delete(pos, idx)
		return value

	def bisect_left(self, value):
		(pos, idx) = self._loc_left(value)
		return self._fen_query(pos) + idx

	def bisect_right(self, value):
		(pos, idx) = self._loc_right(value)
		return self._fen_query(pos) + idx

	def count(self, value):
		return self.bisect_right(value) - self.bisect_left(value)

	def __len__(self):
		return self._len

	def __getitem__(self, index):
		(pos, idx) = self._fen_findkth(self._len + index if index < 0 else index)
		return self._lists[pos][idx]

	def __delitem__(self, index):
		(pos, idx) = self._fen_findkth(self._len + index if index < 0 else index)
		self._delete(pos, idx)

	def __contains__(self, value):
		_lists = self._lists
		if _lists:
			(pos, idx) = self._loc_left(value)
			return idx < len(_lists[pos]) and _lists[pos][idx] == value
		return False

	def __iter__(self):
		return (value for _list in self._lists for value in _list)

	def __reversed__(self):
		return (value for _list in reversed(self._lists) for value in reversed(_list))

	def __repr__(self):
		return 'SortedList({0})'.format(list(self))

class SegTree:

	def __init__(self, n):
		self.N = 1 << n.bit_length()
		self.tree = [0] * (self.N << 1)

	def update(self, i, j, v):
		i += self.N
		j += self.N
		while i <= j:
			if i % 2 == 1:
				self.tree[i] += v
			if j % 2 == 0:
				self.tree[j] += v
			(i, j) = (i + 1 >> 1, j - 1 >> 1)

	def query(self, i):
		v = 0
		i += self.N
		while i > 0:
			v += self.tree[i]
			i >>= 1
		return v

def SieveOfEratosthenes(limit):
	isPrime = [True] * (limit + 1)
	isPrime[0] = isPrime[1] = False
	primes = []
	for i in range(2, limit + 1):
		if not isPrime[i]:
			continue
		primes += [i]
		for j in range(i * i, limit + 1, i):
			isPrime[j] = False
	return primes

def main():
	mod = 1000000007
	starttime = datetime.datetime.now()
	if os.path.exists('input.txt'):
		sys.stdin = open('input.txt', 'r')
		sys.stdout = open('output.txt', 'w')
	tc = ri()
	for _ in range(tc):
		n = ri()
		if n == 1:
			ws('a')
		else:
			ans = ['a'] * (n // 2) + ['b'] + ['a'] * (n // 2 - 1)
			if n % 2:
				ans.append('c')
			ws(''.join(ans))
	endtime = datetime.datetime.now()
	time = (endtime - starttime).total_seconds() * 1000
	if os.path.exists('input.txt'):
		print('Time:', time, 'ms')

class FastReader(io.IOBase):
	newlines = 0

	def __init__(self, fd, chunk_size=1024 * 8):
		self._fd = fd
		self._chunk_size = chunk_size
		self.buffer = io.BytesIO()

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, self._chunk_size))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self, size=-1):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, self._chunk_size if size == -1 else size))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

class FastWriter(io.IOBase):

	def __init__(self, fd):
		self._fd = fd
		self.buffer = io.BytesIO()
		self.write = self.buffer.write

	def flush(self):
		os.write(self._fd, self.buffer.getvalue())
		(self.buffer.truncate(0), self.buffer.seek(0))

class FastStdin(io.IOBase):

	def __init__(self, fd=0):
		self.buffer = FastReader(fd)
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')

class FastStdout(io.IOBase):

	def __init__(self, fd=1):
		self.buffer = FastWriter(fd)
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.flush = self.buffer.flush
sys.stdin = FastStdin()
sys.stdout = FastStdout()
main()


import sys
from bisect import bisect_left as lb
from collections import deque
from queue import PriorityQueue as pq
from math import *
input_ = lambda : sys.stdin.readline().strip('\r\n')
ii = lambda : int(input_())
il = lambda : list(map(int, input_().split()))
ilf = lambda : list(map(float, input_().split()))
ip = lambda : input_()
fi = lambda : float(input_())
ap = lambda ab, bc, cd: ab[bc].append(cd)
li = lambda : list(input_())
pr = lambda x: print(x)
prinT = lambda x: print(x)
f = lambda : sys.stdout.flush()
inv = lambda x: pow(x, mod - 2, mod)
mod = 10 ** 9 + 7
for _ in range(ii()):
	n = ii()
	m = n
	ans = ''
	z = ord('z')
	while m % 4 != 0:
		ans += chr(z)
		z -= 1
		m -= 1
	if m == 0:
		print(ans)
		continue
	l = m // 4
	ans += 'a' * l + 'd' + 'b' * (l - 1) + 'a' * (l - 1) + 'e' + 'b' * l
	print(ans)


for _ in range(int(input())):
	n = int(input())
	if n <= 26:
		print('abcdefghijklmnopqrstuvwxyz'[:n])
		continue
	x = n - 1 - (n % 2 == 1)
	print('a' * (x // 2) + 'bc'[:1 + n % 2] + 'a' * (x // 2 + 1))


t = int(input())
for _ in range(t):
	n = int(input())
	if n == 1:
		print('a')
		continue
	ans = 'a' * (n // 2)
	if n % 2 == 1:
		ans += 'bc'
	else:
		ans += 'b'
	ans += 'a' * (n // 2 - 1)
	print(ans)


import sys
import math
from math import *
import builtins
import collections
import bisect
import os
from io import BytesIO, IOBase

def print(x, end='\n'):
	sys.stdout.write(str(x) + end)

def get_int():
	return int(input())

def get_list_ints():
	return list(map(int, input().split()))

def get_char_list():
	s = input()
	return list(s[:len(s) - 1])

def get_tuple_ints():
	return tuple(map(int, input().split()))

def print_iterable(p):
	print(' '.join(map(str, p)))

def CountFrequency(arr):
	return collections.Counter(arr)

def reverse(s):
	l = len(s)
	for i in range(l // 2):
		(s[i], s[l - i - 1]) = (s[l - i - 1], s[i])
	return s

def binary_search(arr, x):
	low = 0
	high = len(arr) - 1
	mid = 0
	while low <= high:
		mid = (high + low) // 2
		if arr[mid] < x:
			low = mid + 1
		elif arr[mid] > x:
			high = mid - 1
		else:
			return mid
	return high

def lower_bound(arr, x):
	return bisect.bisect_left(arr, x, lo=0, hi=len(arr))

def upper_bound(arr, x):
	return bisect.bisect_right(arr, x, lo=0, hi=len(arr))

def pow(a, n):
	if n == 0:
		return 1
	elif n % 2 == 0:
		return pow(a, n // 2) % const * (pow(a, n // 2) % const) % const
	else:
		return pow(a, n // 2) % const * (pow(a, n // 2) % const) * (a % const) % const

def main():
	n = get_int()
	for i in range(n):
		l = get_int()
		if l % 2 == 0:
			stri = 'b' * (l // 2 - 1) + 'a' + 'b' * (l // 2)
			print(stri)
		elif l == 1:
			print('a')
		else:
			stri = (l - 1) // 2 * 'a' + 'bc' + ((l - 1) // 2 - 1) * 'a'
			print(stri)
	pass
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')
main()


import traceback
import os
import sys
from io import BytesIO, IOBase
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
sys.stdin = IOWrapper(sys.stdin)
input = lambda : sys.stdin.readline().rstrip('\r\n')
import math
from collections import defaultdict as dfd, Counter
from functools import lru_cache
from itertools import accumulate

def geti():
	return int(input())

def gets():
	return input()

def getil():
	return list(map(int, input().split()))

def getsl():
	return input().split()

def getinps(s):
	inps = s.split()
	m = {'i': geti, 's': gets, 'il': getil, 'sl': getsl}
	if len(inps) == 1:
		return m[s]()
	return [m[k]() for k in inps]

def get2d(nrows, ncols, n=0):
	return [[n] * ncols for r in range(nrows)]

def get_acc(a):
	return list(accumulate(a))

def get_ncr(n, r, mod=10 ** 9 + 7):
	num = den = 1
	r = min(r, n - r)
	for i in range(r):
		num = num * (n - i) % mod
		den = den * (i + 1) % mod
	return num * pow(den, mod - 2, mod) % mod

def get_nc2(n):
	return n * (n - 1) // 2

def get_npr(n, r):
	if n < r:
		return 0
	return math.factorial(n) // math.factorial(r)

def put(a):
	return ' '.join(map(str, a))
inf = float('inf')
mod = 10 ** 9 + 7

def main():
	N = geti()
	s = 'a' * (N // 2)
	s += 'b'
	s += 'a' * (N // 2 - 1)
	s += 'c' if N & 1 and N != 1 else ''
	return s
try:
	Test = geti()
	answers = []
	for _ in range(Test):
		ans = main()
		ans = str(ans)
		answers.append(ans)
	print('\n'.join(answers))
except Exception as e:
	print(e)
	traceback.print_exc()


t = int(input())
while t:
	t -= 1
	n = int(input())
	if n < 20:
		ans = ''
		for i in range(97, 97 + n):
			ans += chr(i)
		print(ans)
		continue
	if n % 2 == 0:
		mid = 'b'
		k = n - 1
		l1 = k // 2
		l2 = k - l1
	else:
		mid = 'bc'
		k = n - 2
		l1 = k // 2
		l2 = k - l1
	print('a' * l1 + mid + 'a' * l2)


from collections import Counter
from math import *
mod = 1000000007

def pro(n):
	if n == 1:
		print('a')
		return
	k = n - 1
	if k % 2:
		res = ''
		res += 'a' * (k // 2)
		rem = k - k // 2
		res += 'b'
		res += 'a' * rem
	else:
		k = k - 1
		res = ''
		res += 'a' * (k // 2)
		rem = k - k // 2
		res += 'bp'
		res += 'a' * rem
	print(res)
t = int(input())
for i in range(t):
	n = int(input())
	pro(n)


import sys, os, io
from sys import stdin
import math
from collections import defaultdict
from heapq import heappush, heappop, heapify
from bisect import bisect_left, bisect_right
from io import BytesIO, IOBase
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
alphabets = list('abcdefghijklmnopqrstuvwxyz')
from types import GeneratorType

def bootstrap(f, stack=[]):

	def wrappedfunc(*args, **kwargs):
		if stack:
			return f(*args, **kwargs)
		else:
			to = f(*args, **kwargs)
			while True:
				if type(to) is GeneratorType:
					stack.append(to)
					to = next(to)
				else:
					stack.pop()
					if not stack:
						break
					to = stack[-1].send(to)
			return to
	return wrappedfunc

def ncr(n, r, p):
	num = den = 1
	for i in range(r):
		num = num * (n - i) % p
		den = den * (i + 1) % p
	return num * pow(den, p - 2, p) % p

def primeFactors(n):
	l = []
	while n % 2 == 0:
		l.append(2)
		n = n / 2
	for i in range(3, int(math.sqrt(n)) + 1, 2):
		while n % i == 0:
			l.append(int(i))
			n = n / i
	if n > 2:
		l.append(n)
	return list(set(l))

def power(x, y, p):
	res = 1
	x = x % p
	if x == 0:
		return 0
	while y > 0:
		if y & 1 == 1:
			res = res * x % p
		y = y >> 1
		x = x * x % p
	return res

def sieveForSmallestPrimeFactor():
	MAXN = 100001
	spf = [0 for i in range(MAXN)]
	spf[1] = 1
	for i in range(2, MAXN):
		spf[i] = i
	for i in range(4, MAXN, 2):
		spf[i] = 2
	for i in range(3, math.ceil(math.sqrt(MAXN))):
		if spf[i] == i:
			for j in range(i * i, MAXN, i):
				if spf[j] == j:
					spf[j] = i
	return spf

def getPrimeFactorizationLOGN(x):
	spf = sieveForSmallestPrimeFactor()
	ret = list()
	while x != 1:
		ret.append(spf[x])
		x = x // spf[x]
	return ret

def SieveOfEratosthenes(n):
	prime = [True for i in range(n + 1)]
	p = 2
	while p * p <= n:
		if prime[p] == True:
			for i in range(p * p, n + 1, p):
				prime[i] = False
		p += 1
	return prime

def si():
	return input()

def divideCeil(n, x):
	if n % x == 0:
		return n // x
	return n // x + 1

def ii():
	return int(input())

def li():
	return list(map(int, input().split()))
if os.path.exists('input.txt'):
	sys.stdin = open('input.txt', 'r')
	sys.stdout = open('output.txt', 'w')
else:
	(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
	input = lambda : sys.stdin.readline().rstrip('\r\n')

def solve():
	n = ii()
	if n <= 5:
		print(''.join(alphabets[:n]))
		return
	if n % 2 == 1:
		x = n // 2
		ans = ['a'] * x + ['b', 'c'] + ['a'] * (x - 1)
	else:
		x = n // 2
		ans = ['a'] * x + ['b'] + ['a'] * (x - 1)
	print(''.join(ans))
t = 1
t = ii()
for _ in range(t):
	solve()


import sys
input = lambda : sys.stdin.readline().rstrip('\r\n')
inp = lambda : list(map(int, sys.stdin.readline().rstrip('\r\n').split()))
mod = 10 ** 9 + 7
Mod = 998244353
INF = float('inf')
import math
from bisect import *
from heapq import *
from collections import defaultdict as dd
from collections import OrderedDict as odict
from collections import Counter as cc
from collections import deque
from itertools import groupby
sys.setrecursionlimit(20 * 20 * 20 * 20 + 10)

def solve():
	n = takein()
	if n == 1:
		print('a')
		return
	ans = 'a' * (n // 2)
	if n % 2 == 0:
		ans += 'b'
	else:
		ans += 'bc'
	ans += 'a' * (n // 2 - 1)
	print(ans)

def main():
	global tt
	if not ONLINE_JUDGE:
		sys.stdin = open('input.txt', 'r')
		sys.stdout = open('output.txt', 'w')
	t = 1
	t = takein()
	for tt in range(1, t + 1):
		solve()
	if not ONLINE_JUDGE:
		print('Time Elapsed :', time.time() - start_time, 'seconds')
		sys.stdout.close()

def takein():
	return int(sys.stdin.readline().rstrip('\r\n'))

def takesr():
	return sys.stdin.readline().rstrip('\r\n')

def takeiar():
	return list(map(int, sys.stdin.readline().rstrip('\r\n').split()))

def takesar():
	return list(map(str, sys.stdin.readline().rstrip('\r\n').split()))

def takeivr():
	return map(int, sys.stdin.readline().rstrip('\r\n').split())

def takesvr():
	return map(str, sys.stdin.readline().rstrip('\r\n').split())

def ispalindrome(s):
	return s == s[::-1]

def invert(bit_s):
	temp = int(bit_s, 2)
	inverse_s = temp ^ 2 ** (len(bit_s) + 1) - 1
	rslt = bin(inverse_s)[3:]
	return str(rslt)

def counter(a):
	q = [0] * max(a)
	for i in range(len(a)):
		q[a[i] - 1] = q[a[i] - 1] + 1
	return q

def counter_elements(a):
	q = dict()
	for i in range(len(a)):
		if a[i] not in q:
			q[a[i]] = 0
		q[a[i]] = q[a[i]] + 1
	return q

def string_counter(a):
	q = [0] * 26
	for i in range(len(a)):
		q[ord(a[i]) - 97] = q[ord(a[i]) - 97] + 1
	return q

def factorial(n, m=1000000007):
	q = 1
	for i in range(n):
		q = q * (i + 1) % m
	return q

def factors(n):
	q = []
	for i in range(1, int(n ** 0.5) + 1):
		if n % i == 0:
			q.append(i)
			q.append(n // i)
	return list(sorted(list(set(q))))

def prime_factors(n):
	q = []
	while n % 2 == 0:
		q.append(2)
		n = n // 2
	for i in range(3, int(n ** 0.5) + 1, 2):
		while n % i == 0:
			q.append(i)
			n = n // i
	if n > 2:
		q.append(n)
	return list(sorted(q))

def transpose(a):
	(n, m) = (len(a), len(a[0]))
	b = [[0] * n for i in range(m)]
	for i in range(m):
		for j in range(n):
			b[i][j] = a[j][i]
	return b

def power_two(x):
	return x and (not x & x - 1)

def ceil(a, b):
	return -(-a // b)

def seive(n):
	a = [1]
	prime = [True for i in range(n + 1)]
	p = 2
	while p * p <= n:
		if prime[p] == True:
			for i in range(p ** 2, n + 1, p):
				prime[i] = False
		p = p + 1
	for p in range(2, n + 1):
		if prime[p]:
			a.append(p)
	return a

def pref(li):
	pref_sum = [0]
	for i in li:
		pref_sum.append(pref_sum[-1] + i)
	return pref_sum

def kadane(x):
	sum_so_far = 0
	current_sum = 0
	for i in x:
		current_sum += i
		if current_sum < 0:
			current_sum = 0
		else:
			sum_so_far = max(sum_so_far, current_sum)
	return sum_so_far

def binary_search(li, val):
	ans = -1
	lb = 0
	ub = len(li) - 1
	while lb <= ub:
		mid = (lb + ub) // 2
		if li[mid] > val:
			ub = mid - 1
		elif val > li[mid]:
			lb = mid + 1
		else:
			ans = mid
			break
	return ans

def upper_bound(li, num):
	answer = -1
	start = 0
	end = len(li) - 1
	while start <= end:
		middle = (end + start) // 2
		if li[middle] <= num:
			answer = middle
			start = middle + 1
		else:
			end = middle - 1
	return answer

def lower_bound(li, num):
	answer = -1
	start = 0
	end = len(li) - 1
	while start <= end:
		middle = (end + start) // 2
		if li[middle] >= num:
			answer = middle
			end = middle - 1
		else:
			start = middle + 1
	return answer
ONLINE_JUDGE = __debug__
if ONLINE_JUDGE:
	input = sys.stdin.readline
main()


from bisect import insort, bisect_right, bisect_left
from sys import stdout, stdin, setrecursionlimit
from heapq import heappush, heappop, heapify
from io import BytesIO, IOBase
from collections import *
from itertools import *
from random import *
from string import *
from queue import *
from math import *
from re import *
from os import *

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = read(self._fd, max(fstat(self._fd).st_size, 8192))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = read(self._fd, max(fstat(self._fd).st_size, 8192))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(stdin, stdout) = (IOWrapper(stdin), IOWrapper(stdout))
(graph, mod, szzz) = ({}, 10 ** 9 + 7, lambda : sorted(zzz()))

def getStr():
	return input()

def getInt():
	return int(input())

def listStr():
	return list(input())

def getStrs():
	return input().split()

def isInt(s):
	return '0' <= s[0] <= '9'

def input():
	return stdin.readline().strip()

def zzz():
	return [int(i) for i in input().split()]

def output(answer, end='\n'):
	stdout.write(str(answer) + end)

def lcd(xnum1, xnum2):
	return xnum1 * xnum2 // gcd(xnum1, xnum2)

def getPrimes(N=10 ** 5):
	SN = int(sqrt(N))
	sieve = [i for i in range(N + 1)]
	sieve[1] = 0
	for i in sieve:
		if i > SN:
			break
		if i == 0:
			continue
		for j in range(2 * i, N + 1, i):
			sieve[j] = 0
	prime = [i for i in range(N + 1) if sieve[i] != 0]
	return prime

def primeFactor(n, prime=getPrimes()):
	lst = []
	mx = int(sqrt(n)) + 1
	for i in prime:
		if i > mx:
			break
		while n % i == 0:
			lst.append(i)
			n //= i
	if n > 1:
		lst.append(n)
	return lst
dx = [-1, 1, 0, 0, 1, -1, 1, -1]
dy = [0, 0, 1, -1, 1, -1, -1, 1]
daysInMounth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
import math

def maximumXOR(n, l, r):
	x = 0
	for i in range(31, -1, -1):
		if n & 1 << i:
			if x + (1 << i) - 1 < l:
				x ^= 1 << i
		elif x ^ 1 << i <= r:
			x ^= 1 << i
	return x
num = getInt()
for _ in range(num):
	n = getInt()
	ans1 = 'a' * (n // 2)
	if n % 2 == 0:
		mid = 'b'
	else:
		mid = 'bc'
	print((ans1 + mid + ans1[:-1])[:n])


import sys
from math import *
import builtins
import string
import bisect
alphabets = list(string.ascii_lowercase)
ALPHABETS = list(string.ascii_uppercase)

def print(x, end='\n'):
	sys.stdout.write(str(x) + end)

def get_int():
	return int(input())

def get_list_ints():
	return list(map(int, input().split()))

def get_char_list():
	s = input()
	return list(s[:len(s)])

def get_tuple_ints():
	return tuple(map(int, input().split()))

def print_iterable(p):
	print(' '.join(map(str, p)))

def floorSearch(arr, low, high, x):
	if low > high:
		return -1
	if x >= arr[high]:
		return high
	mid = int((low + high) / 2)
	if arr[mid] == x:
		return mid
	if mid > 0 and arr[mid - 1] <= x < arr[mid]:
		return mid - 1
	if x < arr[mid]:
		return floorSearch(arr, low, mid - 1, x)
	return floorSearch(arr, mid + 1, high, x)

def binary_search(arr, x):
	low = 0
	high = len(arr) - 1
	mid = 0
	while low <= high:
		mid = (high + low) // 2
		if arr[mid] < x:
			low = mid + 1
		elif arr[mid] > x:
			high = mid - 1
		else:
			return mid
	return high

def main():
	p = get_int()
	for q in range(p):
		n = get_int()
		k = int(n // 2)
		if n == 1:
			print('a')
		else:
			if n % 2 == 0:
				ls = ['a' for y in range(k)] + ['b'] + ['a' for y in range(k - 1)]
			else:
				ls = ['a' for y in range(k)] + ['b', 'c'] + ['a' for y in range(k - 1)]
			s = ''.join((y for y in ls))
			print(s)
	pass
main()


import os
import sys
from io import BytesIO, IOBase
import math
from queue import Queue
import collections
import itertools
import bisect
import heapq
import random

def main():
	pass
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')

def binary(n):
	return bin(n).replace('0b', '')

def decimal(s):
	return int(s, 2)

def pow2(n):
	p = 0
	while n > 1:
		n //= 2
		p += 1
	return p

def primeFactors(n):
	cnt = []
	while n % 2 == 0:
		cnt.append(2)
		n = n / 2
	for i in range(3, int(math.sqrt(n)) + 1, 2):
		while n % i == 0:
			cnt.append(i)
			n = n / i
	if n > 2:
		cnt.append(int(n))
	return cnt

def primeFactorsCount(n):
	cnt = 0
	while n % 2 == 0:
		cnt += 1
		n = n // 2
	for i in range(3, int(math.sqrt(n)) + 1, 2):
		while n % i == 0:
			cnt += 1
			n = n // i
	if n > 2:
		cnt += 1
	return cnt

def isPrime(n):
	if n == 1:
		return False
	else:
		root = int(n ** 0.5)
		root += 1
		for i in range(2, root):
			if n % i == 0:
				return False
		return True

def maxPrimeFactors(n):
	maxPrime = -1
	while n % 2 == 0:
		maxPrime = 2
		n >>= 1
	for i in range(3, int(math.sqrt(n)) + 1, 2):
		while n % i == 0:
			maxPrime = i
			n = n / i
	if n > 2:
		maxPrime = n
	return int(maxPrime)

def countcon(s, i):
	c = 0
	ch = s[i]
	for i in range(i, len(s)):
		if s[i] == ch:
			c += 1
		else:
			break
	return c

def lis(arr):
	n = len(arr)
	lis = [1] * n
	for i in range(1, n):
		for j in range(0, i):
			if arr[i] > arr[j] and lis[i] < lis[j] + 1:
				lis[i] = lis[j] + 1
	maximum = 0
	for i in range(n):
		maximum = max(maximum, lis[i])
	return maximum

def isSubSequence(str1, str2):
	m = len(str1)
	n = len(str2)
	j = 0
	i = 0
	while j < m and i < n:
		if str1[j] == str2[i]:
			j = j + 1
		i = i + 1
	return j == m

def maxfac(n):
	root = int(n ** 0.5)
	for i in range(2, root + 1):
		if n % i == 0:
			return n // i
	return n

def p2(n):
	c = 0
	while n % 2 == 0:
		n //= 2
		c += 1
	return c

def seive(n):
	primes = [True] * (n + 1)
	primes[1] = primes[0] = False
	i = 2
	while i * i <= n:
		if primes[i] == True:
			for j in range(i * i, n + 1, i):
				primes[j] = False
		i += 1
	pr = []
	for i in range(0, n + 1):
		if primes[i]:
			pr.append(i)
	return pr

def ncr(n, r, p):
	num = den = 1
	for i in range(r):
		num = num * (n - i) % p
		den = den * (i + 1) % p
	return num * pow(den, p - 2, p) % p

def denofactinverse(n, m):
	fac = 1
	for i in range(1, n + 1):
		fac = fac * i % m
	return pow(fac, m - 2, m)

def numofact(n, m):
	fac = 1
	for i in range(1, n + 1):
		fac = fac * i % m
	return fac

def sod(n):
	s = 0
	while n > 0:
		s += n % 10
		n //= 10
	return s
for xyz in range(0, int(input())):
	n = int(input())
	if n % 2:
		if n == 1:
			print('a')
		elif n == 3:
			print('abc')
		else:
			print('a' * (n // 2), end='')
			print('b', end='')
			print('a' * ((n - 2) // 2), end='')
			print('c')
	else:
		print('a' * (n // 2), end='')
		print('b', end='')
		print('a' * ((n - 2) // 2))


T = int(input())
for _ in range(T):
	n = int(input())
	if n == 1:
		print('a')
	elif n % 2 == 0:
		x = n // 2
		ans = ['a'] * x + ['b'] + ['a'] * (x - 1)
		print(*ans, sep='')
	else:
		x = n // 2
		ans = ['a'] * x + ['b', 'c'] + ['a'] * (x - 1)
		print(*ans, sep='')


import sys
import bisect
from bisect import bisect_left as lb
from bisect import bisect_right as rb
input_ = lambda : sys.stdin.readline().strip('\r\n')
from math import log
from math import gcd
from math import atan2, acos
from random import randint
sa = lambda : input_()
sb = lambda : int(input_())
sc = lambda : input_().split()
sd = lambda : list(map(int, input_().split()))
sflo = lambda : list(map(float, input_().split()))
se = lambda : float(input_())
sf = lambda : list(input_())
flsh = lambda : sys.stdout.flush()
mod = 10 ** 9 + 7
mod1 = 998244353
gp = []
cost = []
dp = []
mx = []
ans1 = []
ans2 = []
special = []
specnode = []
a = 0
kthpar = []

def dfs2(root, par):
	if par != -1:
		dp[root] = dp[par] + 1
	for i in range(1, 20):
		if kthpar[root][i - 1] != -1:
			kthpar[root][i] = kthpar[kthpar[root][i - 1]][i - 1]
	for child in gp[root]:
		if child == par:
			continue
		kthpar[child][0] = root
		dfs(child, root)
ans = 0
b = []
vis = []
tot = 0
time = []
time1 = []
adj = []
mx = -1
eps = 1e-07

def dfs(a, b, p, c):
	if a == b:
		return c
	for (i, j) in adj[a]:
		if i == p:
			continue
		temp = dfs(i, b, a, c + j)
		if dfs(i, b, a):
			mx = max(i, mx)
			return 1
adj = []
ans = []

def dfs(root, par, v):
	global adj, ans, abe
	tot = v
	for (child, val) in adj[root]:
		if par == child:
			continue
		tot |= dfs(child, root, val)
	ans[root] = tot
	return tot
abe = 0

def traverse(root, par):
	global adj, ans, abe
	for (child, val) in adj[root]:
		if par == child:
			continue
		if ans[child] == 0:
			abe += 1
		else:
			traverse(child, root)

def hnbhai(tc):
	n = sb()
	x = n
	ans = ''
	z = ord('z')
	while x % 4 != 0:
		ans += chr(z)
		z -= 1
		x -= 1
	if x == 0:
		print(ans)
		return
	sz = x // 4
	ans += 'a' * sz + 'm' + 'b' * (sz - 1) + 'a' * (sz - 1) + 'n' + 'b' * sz
	print(ans)
for _ in range(sb()):
	hnbhai(_ + 1)


import sys
input = sys.stdin.readline
t = int(input())
for j in range(t):
	n = int(input())
	ans = []
	if n == 2:
		print('ab')
		continue
	if n % 2 == 0:
		ans1 = []
		for i in range(n // 2):
			ans1.append('a')
		ans.extend(ans1)
		ans.append('b')
		ans.extend(ans1)
		ans.pop(n - 1)
	else:
		n = n - 1
		ans1 = []
		for i in range(n // 2):
			ans1.append('a')
		ans.extend(ans1)
		ans.append('b')
		ans.extend(ans1)
		ans.pop(-1)
		ans.extend('c')
	print(''.join(ans))


import sys, os, io
input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline

def ii():
	return int(input())
for t in range(ii()):
	t += 1
	n = ii()
	ans = ''
	if n <= 26:
		for i in range(97, 97 + n):
			if i != 97 + n - 1:
				print(chr(i), end='')
			else:
				print(chr(i))
	else:
		k = n // 2
		for i in range(k - 1):
			print('a', end='')
		print('b', end='')
		for i in range(k):
			if i == k - 1 and n % 2 == 0:
				print('a')
			else:
				print('a', end='')
		if n % 2:
			print('c')


T = int(input())
for t in range(T):
	n = int(input())
	x = n // 2
	print('a' * x + 'bc'[:n - x - max(0, x - 1)] + 'a' * max(0, x - 1))


import sys, os, io
input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline
for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
		continue
	a = []
	if n % 2:
		a.append('z')
		n -= 1
	a.append('a' * (n // 2))
	a.append('b')
	a.append('a' * (n // 2 - 1))
	print(''.join(a))


for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
	elif n == 2:
		print('ab')
	elif n % 2 == 0:
		xx = n // 2
		print('a' * xx + 'b' + 'a' * (xx - 1))
	else:
		n -= 1
		xx = n // 2
		print('a' * xx + 'b' + 'a' * (xx - 1) + 'c')


import heapq, math
from collections import defaultdict, deque
from os import getcwd
import sys, os.path
if os.path.exists('C:/Users/Dhanush/Desktop/cp/input.txt'):
	sys.stdout = open('C:/Users/Dhanush/Desktop/cp/output.txt', 'w')
	sys.stdin = open('C:/Users/Dhanush/Desktop/cp/input.txt', 'r')
input = sys.stdin.readline
for _ in range(int(input())):
	n = int(input())
	l = []
	if n == 1:
		print('a')
	elif n % 2 == 0:
		for i in range(n // 2):
			l.append('a')
		l.append('b')
		for i in range(n // 2 - 1):
			l.append('a')
		print(''.join(l))
	else:
		for i in range(n // 2):
			l.append('a')
		l.append('b')
		for i in range(n // 2 - 1):
			l.append('a')
		l.append('c')
		print(''.join(l))


t = int(input())
for tc in range(t):
	n = int(input())
	if n == 1:
		print('a')
		continue
	m = n // 2
	res = []
	for i in range(m):
		res.append('a')
	res.append('y')
	if n % 2:
		res.append('x')
	for i in range(m - 1):
		res.append('a')
	print(''.join(res))


import os, sys
from io import BytesIO, IOBase
from math import log2, ceil, sqrt, gcd
from _collections import deque
import heapq as hp
from bisect import bisect_left, bisect_right
from math import cos, sin
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')
mod = 10 ** 9 + 7
for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
		continue
	if n % 2 == 0:
		t1 = (n - 1) // 2
		t2 = n - 1 - t1
		print('a' * t1 + 'b' + 'a' * t2)
	else:
		n -= 1
		t1 = (n - 1) // 2
		t2 = n - 1 - t1
		print('a' * t1 + 'b' + 'a' * t2 + 'c')


t = int(input())
for i in range(t):
	n = int(input())
	if n == 1:
		print('x')
	elif n % 2 == 0:
		print('a' * (n // 2) + 'x' + 'a' * (n // 2 - 1))
	else:
		print('a' * (n // 2) + 'xy' + 'a' * (n // 2 - 1))


from functools import lru_cache
from collections import deque

def solve():
	t = int(input())
	for _ in range(t):
		n = int(input())
		if n % 2 == 0:
			print('a' * (n // 2) + 'b' + 'a' * ((n - 1) // 2))
		elif n == 1:
			print('a')
		else:
			print('a' * ((n - 1) // 2) + 'bc' + 'a' * ((n - 2) // 2))
solve()


n = int(input())
for i in range(n):
	a = int(input())
	if a == 1:
		print('a')
	elif a % 2 == 0:
		print('a' * (a // 2), end='')
		print('b', end='')
		print('a' * (a - (a // 2 + 1)))
	else:
		print('a' * ((a - 1) // 2), end='')
		print('b', end='')
		print('a' * (a - 1 - (a // 2 + 1)), end='')
		print('c')


t = int(input())
while t > 0:
	n = int(input())
	ans = 'a' * int(n / 2) + 'b' + 'a' * int(n / 2 - 1)
	if n % 2 == 1:
		ans += 'c'
	if n == 1:
		ans = 'a'
	print(ans)
	t -= 1


import sys
alp = 'abcdefghijklmnopqrstuvwxyz'
for i in range(int(input())):
	n = int(sys.stdin.readline())
	if n < 20:
		print(alp[0:n])
	else:
		if n % 2 == 1:
			ans = 'a' * (n // 2) + 'b' + 'a' * (n // 2 - 1) + 'c'
		else:
			ans = 'a' * (n // 2) + 'b' + 'a' * (n // 2 - 1)
		print(ans)


from sys import stdin
input = stdin.buffer.readline

def func():
	if n == 1:
		print('a')
	else:
		s = 'a' * (n // 2)
		if n & 1:
			s += 'bc'
		else:
			s += 'b'
		s += 'a' * (n // 2 - 1)
		print(s)
for _ in range(int(input())):
	n = int(input())
	func()


t = int(input())
while t:
	n = int(input())
	s = ''
	if n == 1:
		print('a')
		t -= 1
		continue
	if n % 2 == 0:
		s += int(n / 2) * 'a' + 'b' + int(n / 2 - 1) * 'a'
	else:
		s += int(n / 2) * 'a' + 'bc' + int(n / 2 - 1) * 'a'
	print(s)
	t -= 1


import math
import os
import sys
from io import BytesIO, IOBase
M = 10 ** 9 + 7
import heapq
import bisect
from functools import lru_cache
from collections import *
if sys.version_info[0] < 3:
	from __builtin__ import xrange as range
	from future_builtins import ascii, filter, hex, map, oct, zip
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')

def print(*args, **kwargs):
	(sep, file) = (kwargs.pop('sep', ' '), kwargs.pop('file', sys.stdout))
	at_start = True
	for x in args:
		if not at_start:
			file.write(sep)
		file.write(str(x))
		at_start = False
	file.write(kwargs.pop('end', '\n'))
	if kwargs.pop('flush', False):
		file.flush()
if sys.version_info[0] < 3:
	(sys.stdin, sys.stdout) = (FastIO(sys.stdin), FastIO(sys.stdout))
else:
	(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')

def inp():
	return sys.stdin.readline().rstrip('\r\n')

def out(var):
	sys.stdout.write(str(var))

def lis():
	return list(map(int, inp().split()))

def stringlis():
	return list(map(str, inp().split()))

def sep():
	return map(int, inp().split())

def strsep():
	return map(str, inp().split())

def fsep():
	return map(float, inp().split())

def inpu():
	return int(inp())

def valid(arr, n, c, mid):
	s = 0
	p = arr[0]
	for i in range(1, n):
		temp = arr[i] - p
		if temp >= mid:
			s += 1
			p = arr[i]
	if s >= c - 1:
		return True
	return False

def fun(n):
	s = str(n)
	ans = 0
	for i in range(len(s)):
		p = int(s[i])
		ans += math.factorial(p)
	ans = str(ans)
	res = 0
	for i in range(len(ans)):
		res += int(ans[i])
	return res

def fun4(n):
	m = 1
	while n & m:
		n ^= m
		m <<= 1
	n = n ^ m
	return n

def main():
	t = 1
	t = inpu()
	for _ in range(t):
		n = inpu()
		if n == 1:
			print('a')
		elif n % 2 == 0:
			print('a' * (n // 2) + 'b' + 'a' * (n // 2 - 1))
		else:
			print('a' * (n // 2) + 'bc' + 'a' * (n // 2 - 1))
main()


import sys, os
from math import *
from bisect import *
from heapq import *
from collections import *
if os.path.exists('in.txt'):
	sys.stdin = open('in.txt', 'r')
from io import BytesIO, IOBase

def main():
	for _ in range(int(input())):
		n = int(input())
		k = n // 2
		if n == 1:
			print('a')
		elif n % 2:
			print('a' * k + 'bc' + 'a' * (k - 1))
		else:
			print('a' * k + 'b' + 'a' * (k - 1))
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')

def MI():
	return map(int, input().split())

def outP(var):
	sys.stdout.write(str(var) + '\n')
MOD = 10 ** 9 + 7
mod = 998244353
main()


t = int(input())
for i in [0] * t:
	n = int(input())
	if n % 2:
		print('c' * int(n > 1) + 'a' * (n // 2 - 1) + 'b' + 'a' * (n // 2))
	else:
		print('a' * (n // 2 - 1) + 'b' + 'a' * (n // 2))


T = int(input())
for t in range(T):
	N = int(input())
	ans = 'a' * (N // 2) + 'b' + 'a' * (N // 2 - 1)
	if N & 1 and N != 1:
		ans += 'c'
	print(ans)


import sys
from sys import stdin
tt = int(stdin.readline())
for loop in range(tt):
	n = int(stdin.readline())
	if n == 1:
		print('a')
	elif n % 2 == 0:
		fi = n // 2
		sc = n // 2 - 1
		a = ['a'] * fi
		a.append('b')
		for j in range(sc):
			a.append('a')
		print(''.join(a))
	else:
		fi = n // 2
		sc = n // 2 - 1
		a = ['a'] * fi
		a.append('b')
		a.append('c')
		for j in range(sc):
			a.append('a')
		print(''.join(a))


T = int(input())
for t in range(T):
	n = int(input())
	k = n // 2
	if n == 1:
		print('a')
		continue
	elif n % 2:
		s = 'a' * k + 'bc' + 'a' * (k - 1)
	else:
		s = 'a' * k + 'b' + 'a' * (k - 1)
	print(s)


def shift(s, start):
	return ''.join([chr(ord(c) + start) for c in s])

def ans(n, start):
	if n == 0:
		return ''
	if n == 1:
		return shift('a', start)
	elif n == 2:
		return shift('ab', start)
	elif n == 3:
		return shift('abc', start)
	elif n == 4:
		return shift('abaa', start)
	elif n == 6:
		return shift('bacada', start)
	elif n == 7:
		return shift('bacadae', start)
	elif n == 10:
		return shift('bacadaeafa', start)
	elif n % 3 == 0:
		sub = ans(n // 3 - 2, start + 2)
		return sub + shift('abb', start) + sub + shift('baa', start) + sub
	elif n % 3 == 1:
		sub = ans(n // 3 - 3, start + 2)
		return sub + shift('aabbb', start) + sub + shift('bbaaa', start) + sub
	else:
		sub = ans(n // 3, start + 2)
		return sub + shift('a', start) + sub + shift('b', start) + sub
t = int(input())
for i in range(t):
	n = int(input())
	print(ans(n, 0))


from sys import stdin
input = stdin.readline
MX = int(200000.0 + 5)
MOD = int(1000000000.0 + 7)

def main():
	test = int(input())
	for _ in range(test):
		n = int(input())
		if n == 1:
			ans = 'a'
		else:
			m = n // 2
			ans = 'a' * m
			ans += 'b'
			ans += 'a' * (m - 1)
			if n % 2 == 1:
				ans += 'c'
		print(ans)
main()


t = int(input())
for _ in range(t):
	s = int(input())
	if s % 2 == 0:
		n = (s - 2) // 2
		ans = 'b' * n + 'a' + 'b' * (n + 1)
	elif s == 1:
		ans = 'a'
	else:
		n = (s - 3) // 2
		ans = 'b' * n + 'a' + 'c' + 'b' * (n + 1)
	print(ans)


import os
import sys
import math
import collections
import functools
import itertools
import heapq
import bisect
from io import BytesIO, IOBase

def vsInput():
	sys.stdin = open('input.txt', 'r')
	sys.stdout = open('output.txt', 'w')
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')
ALPHA = 'abcde'
MOD = 10 ** 9 + 7
EPS = 1e-06

def Ceil(a, b):
	return a // b + int(a % b > 0)

def INT():
	return int(input())

def STR():
	return input()

def INTS():
	return tuple(map(int, input().split()))

def ARRINT():
	return [int(i) for i in input().split()]

def ARRSTR():
	return [i for i in input().split()]
for _ in range(INT()):
	n = INT()
	res = 'a' * (n // 2) + 'b' + 'a' * (n // 2 - 1)
	if n & 1 == 1 and n > 1:
		res += 'c'
	print(res)


for t in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
		continue
	elif n == 2:
		print('ab')
		continue
	half = n // 2
	if n % 2:
		print('a' * (half - 1) + 'b' + 'a' * half + 'c')
	else:
		print('a' * (half - 1) + 'b' + 'a' * half)


import sys
from collections import defaultdict, Counter
from collections import deque
from types import GeneratorType

def solve(k):
	if k == 1:
		return 'a'
	else:
		odd_case = int(k % 2 == 1)
		k -= 1 + odd_case
		num_left = k // 2
		num_right = k // 2 + 1
		return 'a' * num_left + 'b' + 'c' * odd_case + 'a' * num_right
n = int(input())
for _ in range(n):
	k = int(input())
	print(solve(k))


import collections
t = int(input())
for tc in range(t):
	n = int(input())
	if n == 1:
		print('a')
		continue
	elif n == 2:
		print('ab')
		continue
	elif n == 3:
		print('abc')
		continue
	else:
		s = collections.deque(list('abc'))
		count = 1
		while len(s) < n:
			if count % 4 == 1:
				s.pop()
				s.append('a')
				s.append('a')
				count += 1
			elif count % 4 == 2:
				s.append('c')
				count += 1
			elif count % 4 == 3:
				s.pop()
				s.appendleft('a')
				s.appendleft('a')
				count += 1
			elif count % 4 == 0:
				s.append('c')
				count += 1
		while len(s) != 0:
			print(s.popleft(), end='')
		print()


import sys
int1 = lambda x: int(x) - 1
p2D = lambda x: print(*x, sep='\n')

def II():
	return int(sys.stdin.readline())

def LI():
	return list(map(int, sys.stdin.readline().split()))

def LLI(rows_number):
	return [LI() for _ in range(rows_number)]

def LI1():
	return list(map(int1, sys.stdin.readline().split()))

def LLI1(rows_number):
	return [LI1() for _ in range(rows_number)]

def SI():
	return sys.stdin.readline().rstrip()
inf = 10 ** 16
md = 10 ** 9 + 7

def solve():
	n = II()
	if n < 27:
		ans = ''.join((chr(i + 97) for i in range(n)))
	elif n & 1:
		(q, r) = divmod(n, 3)
		(a, b, c) = (q, q, q + r)
		if q & 1 == 0:
			(a, b) = (a + 1, b - 1)
		ans = 'a' * (a // 2) + 'b' * (b // 2) + 'c' * (c // 2) + 'a' * (a // 2 + 1) + 'c' * (c // 2 + 1) + 'b' * (b // 2 + 1)
	else:
		(q, r) = divmod(n, 4)
		(a, b, c, d) = (q, q, q, q + r)
		if q & 1 == 0:
			(a, b, c, d) = (a + 1, b + 1, c - 1, d - 1)
		ans = ''
		ans += 'a' * (a // 2)
		ans += 'b' * (b // 2)
		ans += 'c' * (c // 2)
		ans += 'd' * (d // 2)
		ans += 'a' * (a // 2 + 1)
		ans += 'c' * (c // 2 + 1)
		ans += 'b' * (b // 2 + 1)
		ans += 'd' * (d // 2 + 1)
	print(ans)
for testcase in range(II()):
	solve()


for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
	else:
		k = n // 2
		print('a' * k + 'b' + 'a' * (k - 1) + ('c' if n % 2 != 0 else ''))


import os
import sys
from io import BytesIO, IOBase
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')
(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')
from itertools import permutations
from collections import *
from collections import deque
from operator import itemgetter, attrgetter
from decimal import *
import bisect
import math
import heapq as hq
MOD = 10 ** 9 + 7

def is_prime(n):
	if n == 2 or n == 3:
		return True
	if n < 2 or n % 2 == 0:
		return False
	if n < 9:
		return True
	if n % 3 == 0:
		return False
	r = int(n ** 0.5)
	f = 5
	while f <= r:
		if n % f == 0:
			return False
		if n % (f + 2) == 0:
			return False
		f += 6
	return True

def pow(a, b, m):
	ans = 1
	while b:
		if b & 1:
			ans = ans * a % m
		b //= 2
		a = a * a % m
	return ans

def ispalindrome(s):
	if s[:] == s[::-1]:
		return 1
	return 0
dp = []
limit = []
v = []

def dpdfs(u, t=-1):
	dp[0][u] = 0
	dp[1][u] = 0
	for i in v[u]:
		if i == t:
			continue
		if dp[1][i] == -1:
			dpdfs(i, u)
		dp[0][u] += max(abs(limit[0][u] - limit[1][i]) + dp[1][i], abs(limit[0][u] - limit[0][i]) + dp[0][i])
		dp[1][u] += max(abs(limit[1][u] - limit[1][i]) + dp[1][i], abs(limit[1][u] - limit[0][i]) + dp[0][i])
vis = []
f = 0

def dfs(i):
	vis[i] = 1
	act[i] = 1
	for j in v[i]:
		if act[j]:
			f = 1
			return -1
		if vis[j] == 0:
			if dfs(j) == -1:
				return -1
	act[i] = 0
	ans.append(i)
	return 0
from queue import PriorityQueue

def z_algorithm(s):
	res = [0] * len(s)
	res[0] = len(s)
	(i, j) = (1, 0)
	while i < len(s):
		while i + j < len(s) and s[j] == s[i + j]:
			j += 1
		res[i] = j
		if j == 0:
			i += 1
			continue
		k = 1
		while i + k < len(s) and k + res[k] < j:
			res[i + k] = res[k]
			k += 1
		(i, j) = (i + k, j - k)
	return res

def gcd(a, b):
	if a == 0:
		return b
	return gcd(b % a, a)

def lcm(a, b):
	return a / gcd(a, b) * b

def gcdExtended(a, b):
	if a == 0:
		return (b, 0, 1)
	(gcd, x1, y1) = gcdExtended(b % a, a)
	x = y1 - b // a * x1
	y = x1
	return (gcd, x, y)
import re
for _ in range(int(input())):
	n = int(input())
	ans = ''
	if n == 1:
		print('a')
		continue
	if n % 2:
		ans += 'a' * (n // 2)
		ans += 'bc'
		ans += 'a' * (n // 2 - 1)
	else:
		ans += 'a' * (n // 2)
		ans += 'b'
		ans += 'a' * (n // 2 - 1)
	print(ans)


from __future__ import division, print_function
import os
import sys
from io import BytesIO, IOBase
if sys.version_info[0] < 3:
	from __builtin__ import xrange as range
	from future_builtins import ascii, filter, hex, map, oct, zip

def main():
	pass
BUFSIZE = 8192

class FastIO(IOBase):
	newlines = 0

	def __init__(self, file):
		self._fd = file.fileno()
		self.buffer = BytesIO()
		self.writable = 'x' in file.mode or 'r' not in file.mode
		self.write = self.buffer.write if self.writable else None

	def read(self):
		while True:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			if not b:
				break
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines = 0
		return self.buffer.read()

	def readline(self):
		while self.newlines == 0:
			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
			self.newlines = b.count(b'\n') + (not b)
			ptr = self.buffer.tell()
			(self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr))
		self.newlines -= 1
		return self.buffer.readline()

	def flush(self):
		if self.writable:
			os.write(self._fd, self.buffer.getvalue())
			(self.buffer.truncate(0), self.buffer.seek(0))

class IOWrapper(IOBase):

	def __init__(self, file):
		self.buffer = FastIO(file)
		self.flush = self.buffer.flush
		self.writable = self.buffer.writable
		self.write = lambda s: self.buffer.write(s.encode('ascii'))
		self.read = lambda : self.buffer.read().decode('ascii')
		self.readline = lambda : self.buffer.readline().decode('ascii')

def print(*args, **kwargs):
	(sep, file) = (kwargs.pop('sep', ' '), kwargs.pop('file', sys.stdout))
	at_start = True
	for x in args:
		if not at_start:
			file.write(sep)
		file.write(str(x))
		at_start = False
	file.write(kwargs.pop('end', '\n'))
	if kwargs.pop('flush', False):
		file.flush()
if sys.version_info[0] < 3:
	(sys.stdin, sys.stdout) = (FastIO(sys.stdin), FastIO(sys.stdout))
else:
	(sys.stdin, sys.stdout) = (IOWrapper(sys.stdin), IOWrapper(sys.stdout))
input = lambda : sys.stdin.readline().rstrip('\r\n')
main()
from os import path
import bisect
if path.exists('input.txt'):
	sys.stdin = open('input.txt', 'r')
	sys.stdout = open('output1.txt', 'w')
from heapq import heappop, heappush, heapify
from math import ceil, log
from collections import defaultdict, deque, Counter
mod = 10 ** 9 + 7
for _ in range(int(input())):
	ans = ''
	n = int(input())
	if n <= 26:
		for i in range(n):
			ans += chr(97 + i)
		print(ans)
		continue
	if n == 1:
		ans = 'a'
	elif n % 2 == 0:
		ans = n // 2 * 'a' + 'b' + (n // 2 - 1) * 'a'
	else:
		ans = n // 2 * 'a' + 'bc' + (n // 2 - 1) * 'a'
	print(ans)


def rl():
	return [int(w) for w in input().split()]
for _ in range(int(input())):
	n = rl()[0]
	if n == 1:
		print('a')
	elif n == 2:
		print('ab')
	elif n == 3:
		print('abc')
	elif n % 2 == 0:
		k = (n - 1) // 2 + 1
		print('a' * k + 'b' + 'a' * (k - 1))
	elif n % 2 == 1:
		k = (n - 2) // 2 + 1
		print('a' * k + 'bx' + 'a' * (k - 1))


t = int(input())
for _ in range(t):
	n = int(input())
	if n == 1:
		print('a')
	else:
		lhs = 'a' * (n // 2)
		pivot = 'b' * (n % 2)
		lead = 'c'
		rhs = 'a' * (n // 2 - 1)
		print(lhs + pivot + lead + rhs)


from sys import *
input = stdin.readline
from bisect import *
import math
from collections import *
import operator
from heapq import *
from itertools import *
inf = 10 ** 18
mod = 10 ** 9 + 7
for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('a')
		continue
	ans = ''
	if n % 2 == 0:
		n -= 1
		ans += math.ceil(n / 2) * 'a' + 'b' + n // 2 * 'a'
	else:
		n -= 2
		ans += math.ceil(n / 2) * 'a' + 'bc' + n // 2 * 'a'
	print(ans)


t = int(input())
for i in range(t):
	y = ''
	n = int(input())
	if n == 1:
		print('a')
	elif n == 2:
		print('ab')
	else:
		if n % 2 != 0:
			for i in range(n - 1):
				if i == n // 2:
					y = y + 'bc'
				else:
					y = y + 'a'
		else:
			for i in range(n):
				if i == n // 2:
					y = y + 'b'
				else:
					y = y + 'a'
		print(y)


import math

def solve(n):
	n = int(n)
	if n == 1:
		return 'a'
	if n == 2:
		return 'ab'
	if n == 3:
		return 'abc'
	if n % 2 == 0:
		return 'a' * (n // 2) + 'b' + 'a' * (n // 2 - 1)
	else:
		return 'a' * (n // 2) + 'bc' + 'a' * (n // 2 - 1)

def check(s):
	print('checking ' + s)
	for i in range(0, len(s) - 1):
		for j in range(i + 1, len(s)):
			cur = s[i:j]
			c = 0
			for a in range(len(s)):
				if s[a:a + (j - i)] == cur:
					c += 1
			if c % 2 == 0:
				print('even found')
				print(s[i:j])
				print(c)
				return
	print('none found')
import os
import io
input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline
T = int(input().decode().strip())
for t in range(T):
	n = int(input().decode().strip())
	res = solve(n)
	print(res)


import typing

def solve(n: int) -> typing.NoReturn:
	if n == 1:
		print('a')
		return
	k = n // 2
	mid = 'b'
	if n & 1:
		mid += 'c'
	s = 'a' * k
	s += mid
	s += 'a' * (k - 1)
	print(s)

def main() -> typing.NoReturn:
	t = int(input())
	for _ in range(t):
		n = int(input())
		solve(n)
main()


import sys
tokens = ''.join(sys.stdin.readlines()).split()[::-1]

def next():
	return tokens.pop()

def nextInt():
	return int(next())

def nextFloat():
	return float(next())

def getIntArray(n):
	return [nextInt() for _ in range(n)]

def getFloatArray(n):
	return [nextFloat() for _ in range(n)]

def getStringArray(n):
	return [next() for _ in range(n)]
flush = sys.stdout.flush
testcase = True

def solve(testcase):
	N = nextInt()
	if N == 1:
		print('q')
		return
	half = 's' * (N - 2 >> 1)
	mid = 'xy' if N % 2 else 'z'
	print(half + mid + half + 's')
testcaseCount = nextInt() if testcase else 1
for tc in range(testcaseCount):
	solve(tc + 1)
assert not tokens


import bisect
import copy
import decimal
import fractions
import heapq
import itertools
import math
import random
import sys
from collections import Counter, deque, defaultdict
from functools import lru_cache, reduce
from heapq import heappush, heappop, heapify, heappushpop, _heappop_max, _heapify_max

def _heappush_max(heap, item):
	heap.append(item)
	heapq._siftdown_max(heap, 0, len(heap) - 1)

def _heappushpop_max(heap, item):
	if heap and item < heap[0]:
		(item, heap[0]) = (heap[0], item)
		heapq._siftup_max(heap, 0)
	return item
from math import gcd as GCD, modf
read = sys.stdin.read
readline = sys.stdin.readline
readlines = sys.stdin.readlines
t = int(readline())
for _ in range(t):
	N = int(readline())
	if N == 1:
		ans = 'a'
	elif N % 2 == 0:
		ans = 'a' * (N // 2) + 'b' + 'a' * (N // 2 - 1)
	else:
		ans = 'a' * (N // 2) + 'bc' + 'a' * (N // 2 - 1)
	print(ans)


for _ in range(int(input())):
	n = int(input())
	if n <= 5:
		print('abcde'[:n])
	else:
		print('a' * (n // 2 - 1) + 'bc'[:1 + n % 2] + 'a' * (n // 2))


import sys
input = sys.stdin.readline
t = int(input())
while t > 0:
	n = int(input())
	if n == 1:
		s = 'a'
	else:
		s = 'a' * (n // 2)
		if n % 2 != 0:
			s += 'bc'
		else:
			s += 'b'
		s += 'a' * (n // 2 - 1)
	print(s)
	t -= 1


from sys import *
ws = lambda : map(int, stdin.readline().strip().split())
li = lambda : list(map(int, stdin.readline().strip().split()))
mod = 1000000007

def ncr(n, r, p):
	num = den = 1
	for i in range(r):
		num = num * (n - i) % p
		den = den * (i + 1) % p
	return num * pow(den, p - 2, p) % p

def gcd(a, b):
	if b == 0:
		return a
	return gcd(b, a % b)

def prod(l):
	ans = 1
	for i in range(len(l)):
		ans = ans * l[i]
	return ans

def sortindex(l, a):
	c = []
	if a == -1:
		rev = True
	else:
		rev = False
	for i in range(len(l)):
		c.append([l[i], i])
	x = sorted(c, reverse=rev)
	print(x)
	c = []
	for i in range(len(l)):
		c.append(x[i][1])
	return c
for _ in range(int(input())):
	n = int(input())
	if n == 1:
		print('z')
		continue
	if n & 1:
		t1 = n // 2
		t2 = 'a' * t1
		t2 += 'bc'
		t2 += 'a' * (t1 - 1)
		print(t2)
	else:
		t1 = n // 2
		t2 = 'a' * t1
		t2 += 'b'
		t2 += 'a' * (t1 - 1)
		print(t2)


import sys
input = sys.stdin.buffer.readline
for t in range(int(input())):
	N = int(input())
	if N == 1:
		print('a')
	elif N == 2:
		print('ab')
	elif N & 1:
		M = N >> 1
		print('a' * (M - 1) + 'bc' + 'a' * M)
	else:
		M = N >> 1
		print('a' * (M - 1) + 'b' + 'a' * M)


import sys
import math
import collections
dy = [1, 0, -1, 0]
dx = [0, 1, 0, -1]
r = sys.stdin.readline
for _ in range(int(r())):
	N = int(r())
	if N % 2 == 0:
		N //= 2
		if N % 2 == 0:
			N -= 1
			print('a' * N + 'b' + 'a' * (N - 1) + 'cd')
		else:
			print('a' * N + 'b' + 'a' * (N - 1))
	else:
		N -= 1
		N //= 2
		if N == 0:
			print('a')
			continue
		if N % 2 == 0:
			N -= 1
			print('a' * N + 'b' + 'a' * (N - 1) + 'cde')
		else:
			print('a' * N + 'b' + 'a' * (N - 1) + 'c')