#include <bits/stdc++.h>
inline long long read() {
  long long num = 0, f = 1;
  char c = getchar();
  while (c < 48 || c > 57) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c > 47 && c < 58)
    num = (num << 3) + (num << 1) + (c ^ 48), c = getchar();
  return num * f;
}
inline long long min(long long a, long long b) { return a < b ? a : b; }
inline long long max(long long a, long long b) { return a > b ? a : b; }
struct Edge {
  long long v, nxt;
} e[200005];
long long h[200005], cnt = 1, deg[200005];
inline void addedge(long long u, long long v) {
  e[cnt] = (Edge){v, h[u]};
  h[u] = cnt++;
}
long long d[4][2] = {1, 0, 0, 1, -1, 0, 0, -1};
long long px[555], py[555];
void dfs(long long x, long long y, long long u, long long f, long long gap,
         long long fa) {
  long long cur = 0;
  px[u] = x;
  py[u] = y;
  for (long long i = h[u]; i; i = e[i].nxt) {
    if (e[i].v == fa) continue;
    if (cur == f) cur++;
    long long nx = x + d[cur][0] * gap;
    long long ny = d[cur][1] * gap + y;
    dfs(nx, ny, e[i].v, 2 ^ cur, gap >> 1, u);
    cur++;
  }
}
signed main() {
  long long n = read();
  for (long long i = 1; i < n; i++) {
    long long x = read(), y = read();
    deg[x]++, deg[y]++;
    if (deg[x] > 4 || deg[y] > 4) {
      puts("NO");
      return 0;
    }
    addedge(x, y);
    addedge(y, x);
  }
  puts("YES");
  dfs(0, 0, 1, 5, 1ll << (n + 2), 0);
  for (long long i = 1; i <= n; i++) printf("%lld %lld\n", px[i], py[i]);
  return 0;
}
