#include <bits/stdc++.h>
using namespace std;
vector<int> e[40];
bool visited[40];
map<int, pair<long long, long long>> mp;
pair<int, int> edges[] = {{1, 0}, {0, 1}, {0, -1}, {-1, 0}};
bool dfs(int v, long long x, long long y, int dir, int dist) {
  mp[v] = {x, y};
  dist >>= 1;
  visited[v] = true;
  int j = 0;
  for (int i = 0; i < e[v].size(); i++) {
    if (j + dir == 3) {
      j++;
    }
    int v2 = e[v][i];
    if (visited[v2]) {
      continue;
    }
    long long x1 = x + (edges[j].first) * dist;
    long long y1 = y + (edges[j].second) * dist;
    dfs(v2, x1, y1, j, dist);
    j++;
  }
  return true;
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int temp1, temp2;
    cin >> temp1 >> temp2;
    e[temp1].push_back(temp2);
    e[temp2].push_back(temp1);
  }
  bool flag = true;
  for (int i = 1; i < 40; i++) {
    if (e[i].size() > 4) {
      flag = false;
      break;
    }
  }
  if (!flag) {
    cout << "NO\n";
  } else {
    for (int i = 0; i < 40; i++) {
      visited[i] = false;
    }
    long long dist = 1 << 31;
    bool found = dfs(1, 0, 0, -1, dist);
    pair<long long, long long> coords[n];
    for (auto it = mp.begin(); it != mp.end(); it++) {
      coords[it->first] = it->second;
    }
    cout << "YES\n";
    for (int i = 1; i <= n; i++) {
      cout << coords[i].first << " " << coords[i].second << "\n";
    }
  }
}
