s=input()
cnt=[0]*3
curr=sum(map(int,list(s)))
for c in s:
if c=="0":continue
cnt[int(c)%3]+=1
#必须最后保留一个整数
if sum(cnt)==1:
print("yukari")
exit()
#特判小红操作
t=curr%3
if not cnt[t]:
print("yukari")
exit()
cnt[t]-=1
#接下来就是紫破坏,红修复
#cnt0最后参与
a,b=cnt[1],cnt[2]
if a+b==0:
print("kou")
exit()
if a+b==1:
print("kou")
exit()
if a==b:
if cnt[0]:
print("kou")
else:
print("yukari")
exit()
print("yukari")
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int cnt[3] = {0}; // cnt[0], cnt[1], cnt[2]
// 计算当前数字和 mod 3
int curr = 0;
for (char c : s) {
curr += (c - '0');
}
curr %= 3;
// 统计非 '0' 字符按 mod 3 分类
for (char c : s) {
if (c == '0') continue;
cnt[(c - '0') % 3]++;
}
// 必须最后保留一个整数
if (cnt[0] + cnt[1] + cnt[2] == 1) {
cout << "yukari" << endl;
return 0;
}
// 特判小红操作
if (cnt[curr] == 0) {
cout << "yukari" << endl;
return 0;
}
cnt[curr]--;
// 接下来就是紫破坏,红修复
int a = cnt[1];
int b = cnt[2];
if (a + b == 0) {
cout << "kou" << endl;
return 0;
}
if (a + b == 1) {
cout << "kou" << endl;
return 0;
}
if (a == b) {
if (cnt[0])
cout << "kou" << endl;
else
cout << "yukari" << endl;
return 0;
}
cout << "yukari" << endl;
return 0;
}
首先一个数是3的倍数,那么每一位加起来都是3的倍数
先统计非0位取余3,这是真正会影响结果的因素
如果只有一个位,则小紫赢
if sum(cnt)==1:
print("yukari")
exit()
然后根据每一位加起来取余3结果,去掉一个对应位,如果没有对应位,则小紫赢(小红第一步都干不了)
#特判小红操作
t=curr%3
if not cnt[t]:
print("yukari")
exit()
cnt[t]-=1
接下来就是紫破坏3的倍数情况,红修复
if a+b==0:
print("kou")
exit()
if a+b==1:
print("kou")
exit()
只有1位,或者是没有,那么肯定是小红赢,小紫无法破坏数字是3的倍数的情况
如果相同必然是小紫操作一个,小红操作一个,这是会有两种情况
1.有cnt[0],则小红使用cnt[0]即可,小紫输
2.无cnt[0],则小红最后操作不了,因为必须有一位数,小紫赢
if a==b:
if cnt[0]:
print("kou")
else:
print("yukari")
exit()
其他情况都是小紫赢
比如a和b不相等,小紫可以选择自己选a还是b,最终都会是小红操作不了
print("yukari")

京公网安备 11010502036488号