#include <bits/stdc++.h>
using namespace std;
int n, i, j, a, b, x, y, use[40], grad[40];
vector<int> G[40];
queue<int> frunze;
pair<int, int> ans[40];
int X[] = {1, -1, 0, 0};
int Y[] = {0, 0, 1, -1};
void solve(int nod, int x, int y, int lungime, int poz) {
  int k = -1;
  use[nod] = 1;
  ans[nod].first = x;
  ans[nod].second = y;
  for (int i = 0; i < G[nod].size(); i++) {
    if (!use[G[nod][i]]) {
      ++k;
      if (poz == 0 && k == 1 || poz == 1 && k == 0 || poz == 2 && k == 3 ||
          poz == 3 && k == 2)
        ++k;
      solve(G[nod][i], x + X[k] * lungime, y + Y[k] * lungime, lungime / 2 - 4,
            k);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (i = 1; i < n; i++) {
    cin >> x >> y;
    G[x].push_back(y);
    G[y].push_back(x);
    grad[x]++;
    grad[y]++;
  }
  for (i = 1; i <= n; i++) {
    if (grad[i] == 1) {
      frunze.push(i);
      grad[i]--;
    } else if (grad[i] > 4) {
      cout << "NO";
      return 0;
    }
  }
  while (frunze.size()) {
    x = frunze.front();
    frunze.pop();
    for (auto it : G[x]) {
      grad[it]--;
      if (grad[it] == 1) {
        grad[it]--;
        frunze.push(it);
      }
    }
  }
  solve(x, 0, 0, 100000000, -1);
  cout << "YES\n";
  for (i = 1; i <= n; i++) {
    cout << ans[i].first << ' ' << ans[i].second << '\n';
  }
  return 0;
}
