def check_palindrom(w):
i, j = 0, len(w) - 1
while i <= j:
if w[i] != w[j]:
return False
i += 1
j -= 1
return True
def old(n, k):
if n == k:
return "P"*k
string = "P"*k + "A"
queue = [string]
while queue:
next = queue.pop(0)
if len(next) == n:
return next
for c in ["P", "A"]:
if not check_palindrom(next[len(next) - k:] + c) and not check_palindrom(next[len(next) - k - 1:] + c):
queue.insert(0, next + c)
return "NIE"
def generate_string(n, k):
if k < 4:
if n > 10:
return "NIE"
return old(n, k)
string = "P"*k + "AAPA" + (n//6)*"PPAAPA"
return string[:n]
def main():
t = int(input())
for _ in range(t):
n, k = map(int, input().split())
res = generate_string(n, k)
print(res)
if __name__ == "__main__":
main()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | def check_palindrom(w): i, j = 0, len(w) - 1 while i <= j: if w[i] != w[j]: return False i += 1 j -= 1 return True def old(n, k): if n == k: return "P"*k string = "P"*k + "A" queue = [string] while queue: next = queue.pop(0) if len(next) == n: return next for c in ["P", "A"]: if not check_palindrom(next[len(next) - k:] + c) and not check_palindrom(next[len(next) - k - 1:] + c): queue.insert(0, next + c) return "NIE" def generate_string(n, k): if k < 4: if n > 10: return "NIE" return old(n, k) string = "P"*k + "AAPA" + (n//6)*"PPAAPA" return string[:n] def main(): t = int(input()) for _ in range(t): n, k = map(int, input().split()) res = generate_string(n, k) print(res) if __name__ == "__main__": main() |
English