#include <bits/stdc++.h>
using namespace std;
struct Grid {
  long long x, y, t;
};
struct Edge {
  long long to, cost;
};
struct Graph {
  vector<vector<Edge>> E;
  int V;
  const long long Inf = 1e18;
  const int MAX_V = 201010;
  vector<long long> d;
  Graph(int n) : E(n) {
    d.resize(MAX_V);
    E.resize(n);
    V = n;
  }
  void init() {
    for (int i = 0; i < MAX_V; i++) d[i] = Inf;
  }
  void add_edge(long long from, long long to, long long cost) {
    E[from].push_back({to, cost});
  }
};
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  string s;
  cin >> s;
  if (s.size() % 2)
    cout << "No" << endl;
  else {
    map<char, char> MP;
    MP['p'] = 'q';
    MP['q'] = 'p';
    MP['d'] = 'b';
    MP['b'] = 'd';
    bool fl = true;
    long long n = s.size();
    for (int i = 0; i < n / 2; i++) {
      if (MP[s[n - i]] != s[i]) fl = false;
    }
    if (fl)
      cout << "Yes" << endl;
    else
      cout << "No" << endl;
  }
  return 0;
}
