#include <bits/stdc++.h>
using namespace std;
const int MAX_VERTICES = 33;
int num_vertices;
vector<int> graph[MAX_VERTICES];
pair<long long, long long> coord[MAX_VERTICES];
long long dx[] = {1, 0, -1, 0};
long long dy[] = {0, 1, 0, -1};
inline int ABS(int x) {
  if (x < 0) x = -x;
  return x;
}
void establish_vertices(int curr_vertex, int prev_vertex, long long amplifier,
                        int prev_dir) {
  for (int i = 0; i < (int)graph[curr_vertex].size(); i++) {
    int next_vertex = graph[curr_vertex][i];
    if (next_vertex == prev_vertex) continue;
    int dir;
    for (dir = 0; dir < 4; dir++)
      if (!(prev_dir & (1 << dir))) break;
    prev_dir = (prev_dir | (1 << dir));
    coord[next_vertex].first = coord[curr_vertex].first + amplifier * dx[dir];
    coord[next_vertex].second = coord[curr_vertex].second + amplifier * dy[dir];
    establish_vertices(next_vertex, curr_vertex, amplifier >> 1,
                       (1 << ((dir + 2) % 4)));
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  ;
  cin >> num_vertices;
  for (int i = 1; i < num_vertices; i++) {
    int from, to;
    cin >> from >> to;
    from--;
    to--;
    graph[from].push_back(to);
    graph[to].push_back(from);
  }
  for (int vertex = 0; vertex < num_vertices; vertex++) {
    if ((int)graph[vertex].size() > 4) {
      cout << "NO\n";
      return 0;
    }
  }
  cout << "YES\n";
  establish_vertices(0, -1, 1LL << MAX_VERTICES, 0);
  for (int vertex = 0; vertex < num_vertices; vertex++) {
    cout << coord[vertex].first << " " << coord[vertex].second << "\n";
  }
  return 0;
}
