using
System;
using
System.Collections.Generic;
public
class
GFG{
class
Node {
public
Node left;
public
Node right;
public
int
hd;
public
int
data;
};
static
Node newNode(
int
key)
{
Node node =
new
Node();
node.left = node.right =
null
;
node.data = key;
return
node;
}
static
String reverse(String input) {
char
[] a = input.ToCharArray();
int
l, r = a.Length - 1;
for
(l = 0; l < r; l++, r--) {
char
temp = a[l];
a[l] = a[r];
a[r] = temp;
}
return
String.Join(
""
,a);
}
static
bool
chkp(
int
n)
{
String s = String.Join(
""
,n);
String k = s;
s=reverse(s);
if
(k.Equals(s))
return
true
;
return
false
;
}
static
bool
chklevel(Node root)
{
Queue<Node> q =
new
Queue<Node>();
q.Enqueue(root);
int
k = 1;
int
p = k;
int
n = 0;
while
(q.Count!=0) {
if
(p == 0) {
if
(k != 1)
if
(chkp(n)) {
return
true
;
}
k *= 2;
p = k;
n = 0;
}
Node t = q.Peek();
q.Dequeue();
n = n * 10 + t.data;
p--;
if
(t.left!=
null
) {
q.Enqueue(t.left);
}
if
(t.right!=
null
) {
q.Enqueue(t.right);
}
}
if
(chkp(n))
return
true
;
return
false
;
}
public
static
void
Main(String[] args)
{
Node root = newNode(5);
root.left = newNode(3);
root.right = newNode(3);
root.left.left = newNode(6);
root.left.right = newNode(2);
root.right.right = newNode(6);
root.right.left = newNode(3);
if
(chklevel(root))
Console.Write(
"Yes"
);
else
Console.Write(
"No"
);
}
}