// Slower C++ solution:
// Aimi Haraguni >> Konomi Suzuki >> Yui >>  Ikimono Gakari >> Garnidelia >> Kalafina >> Eir Aoi.   .. dude?

// Ztoking the best of the best

// Kirito >> Naofumi >> Yun Che >> Hao

// .... Sempre Amei Você ...

 

// Sempre amei você

// Mesmo de longe sem te ter

// Você me deu forças para viver

// E ser quem eu queria ser

// 

// 

// Você nunca verá uma menina como ela

// Mais linda em sentimentos que romance de novela

// Bela, ingênua, tipo como cinderela

// Sorte é do homem que estiver ao lado dela

// Guerreira, não compare com as demais

// Lutou muito para cumprir a exigência de seus pais

// Sua força vai além do que cê pensa ser capaz

// Essa menina não desiste daquilo que vai atrás, mas

// Eu fui tão cego pra não ver

// Que apenas ao meu lado ela queria viver

// Enquanto que por outra pessoa eu quis correr

// Ela não desistiu de mim mesmo eu a fazendo sofrer

// Que idiota, como eu não pude perceber?

// Que a menina que me amava estava sempre ali pra ver

// Eu sei que esse sentimento eu não mereço ter

// Mas desta vez eu vou tentar com meus erros aprender

//

// 

// Sempre amei você

// Mesmo de longe sem te ter

// Você me deu forças para viver

// E ser quem eu queria ser

// 

// 

// Ela sempre esteve lá, pra me ajudar

// Quando eu caí, me fez levantar

// Lutei tanto por meu sonho que sempre quis alcançar

// Que acabei ficando cego sem poder enxergar

// Eu nem consegui notar

// Que bem na minha frente era quem deveria amar

// Sempre achei que estava certo e que não podia errar

// Mas só mesmo quando perde pra então valorizar

// E eu perdi, e finalmente entendi

// Que quem eu procurava estava sempre ali

// Levou muito tempo pra ficha cair

// Como eu fui tapado, eu tenho que admitir

// Essa menina conseguiu me surpreender

// Seu olhar estava sempre além do que eu podia ver

// Eu tive que a perder, só pra perceber

// Que ao lado dela é onde eu quero viver

// 

// 

// Sempre amei você

// Mesmo de longe sem te ter

// Você me deu forças para viver

// E ser quem eu queria ser

// 

// 

// Eu tive que a perder

// Pra que pudesse perceber

// Que ao lado dela

// É onde eu quero viver

// Sim, um dia pode ser o fim

// Pode ser tarde demais e tudo acabar assim

// Mas pra ela eu vou dizer

// Não volto com minha palavra

// Com você quero viver

// 

// 

// Sempre amei você

// Mesmo de longe sem te ter

// Você me deu forças para viver

// E ser quem eu queria ser 

 

 

// #pragma GCC optimize ("Ofast,unroll-loops")

// #pragma GCC target ("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

 

#include <bits/stdc++.h>

#include<ext/pb_ds/assoc_container.hpp>

 

#define pb push_back

#define ff  first

#define ss second

#define tm1 first

#define tm2 second.first

#define tm3 second.second

#define sz(x) ll(x.size())

#define fill(x, v) memset(x, v, sizeof(x))

#define all(v) (v).begin(), (v).end()

#define FER(i,a,b) for(ll i=ll(a); i< ll(b); ++i)

#define IFR(i,a,b) for(ll i=ll(a); i>=ll(b); --i )

#define fastio ios_base::sync_with_stdio(0); cin.tie(0)

 

#define N 6800000

#define kk 550

#define mod1 1000000007

#define mod2 1000000009

#define bas 987625403

#define sqr(x) (x)*(x)  

#define INF 5000000000000000

 

using namespace std;

using namespace __gnu_pbds;

 

typedef long long ll;

typedef pair<ll, ll> ii;

typedef pair<ll, ii > tri;

typedef vector<ll> vi;

typedef vector<ii> vii;

typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> set_t;

 

#define trace(...) f(#__VA_ARGS__, __VA_ARGS__)

 

template<typename t> void f(const char* x, t&& val1){

    cout<<x<< " : "<<val1<<endl;

}

 

template<typename t1, typename... t2> void f(const char* x, t1&& val1, t2&&... val2){

    const char* xd=strchr(x+1, ',');

    cout.write(x, xd-x)<<" : "<<val1<<" | ";

    f(xd+1, val2...);

}



 

struct ST{

	ll n, t[1<<18];

	inline ll Op(ll &val1, ll &val2){

		return val1+val2;

	}

	inline void build(){

		IFR(i, n-1, 1) t[i]=Op(t[i<<1], t[i<<1|1]);

	}

	inline void modify(ll l, ll r, ll val){

		for(l+=n, r+=n; l<r; l>>=1, r>>=1){

			if(l&1) t[l++]+=val;

			if(r&1) t[--r]+=val;

		}

	}

	inline ll que(ll p){

		ll ans=0;

		for(p+=n; p>0; p>>=1) ans+=t[p];

		return ans;

	}

}st;

 

inline tri transform(ll a, ll b, ll n){

	ll lim=(n+1)/2;

	if(n&1){

		if(b<=lim) return {0, {a-1, b-a+1}};

		if(a==lim) return {1, {a, b-a}};

		if(a>lim) return {1, {a-1, b-a+1}};

		ll left=lim-a, right=b-lim;

		if(left==right) return {-1, {a-1, 0}};

		if(left<right){

			ll add=right-left;

			ll idx=b-add;

			return {1, {idx, add}};

		}

		else{

			ll add=left-right;

			return {0, {a-1, add}};

		}	

	}

	else{

		if(b<=lim) return {0, {a-1, b-a+1}};

		if(a>lim) return {1, {a-1, b-a+1}};

		ll left=lim-a+1, right=b-lim;

		if(left==right) return {-1, {a-1, 0}};

		if(left<right){

			ll add=right-left;

			ll idx=b-add;

			return {1, {idx, add}};

		}

		else{

			ll add=left-right;

			return {0, {a-1, add}};

		}

	}

}

 

inline ll check(ll n){

	FER(i,0,(n+1)/2){

		ll t1=st.que(i), t2=st.que(n-1-i);

		if(t1!=t2) return 0;

	}

	return 1;

}



vi queriesL[1<<17], queriesR[1<<17];

vi graph[1<<17];

ll ar[1<<17], vis[1<<17];

inline void dfs(ll u, ll &sum){

	vis[u]++;

	sum+=ar[u];

	for(auto xd: graph[u]) if(!vis[xd]) dfs(xd, sum);

}

int main(){

	fastio;

	string s; cin>>s;

	ll q, n=sz(s); cin>>q;

	st.n=n;

	ar[0]=0, ar[n+1]=0;

	FER(i,0,st.n) {

		ll valor=(s[i]-'a'+0);

		ar[i+1]=valor;

	}

	vi tnt;

	FER(i,0,n+1){

		tnt.pb(ar[i+1]-ar[i]);

		graph[i].pb(n-i);

	}

	FER(i,0,sz(tnt)) ar[i]=tnt[i]%26;

	FER(i,0,q){

		ll a, b; cin>>a>>b;

		tri cur=transform(a, b, n);

		if(cur.tm1==-1) continue;

		ll x=cur.tm2, y=cur.tm3+cur.tm2;

		graph[x].pb(y);

		graph[y].pb(x);

	}

	ll flag=1;

	FER(i,0,n+1) if(!vis[i]){

		ll sum=0;

		dfs(i, sum);

		if(sum%26) flag=0;

	}

	flag? cout<<"YES"<<"\n": cout<<"NO"<<"\n";

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 3.3237726805403347x):
#include <bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp>

#include <ext/pb_ds/tree_policy.hpp>

#define PI                acos(-1)

#define pb                emplace_back

#define mp                make_pair

#define all(a)            (a).begin(), (a).end()

#define clr(a,h)          memset(a, (h), sizeof(a))

#define F first

#define S second



using namespace std;

using namespace __gnu_pbds;



typedef long long       ll;

typedef pair<ll, ll>  ii;

typedef vector<ll>     vi;

typedef vector<ii>      vii;

typedef vector<ll>      vll;

typedef tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;

const ll INF = ll(1e9 + 7);



const ll tam = 100010;



vector<ll> G[tam];

ll val[tam];

bool vis[tam];



ll sum;

void dfs(ll v)

{

	//cout << "(" << v << "," << val[v] << ") ";

	sum += (val[v] + 26);

	sum %= 26;

	vis[v] = true;

	for (ll u : G[v])

	{

		if ( vis[u] ) continue;

		dfs(u);

	}

}



ii E[tam];



int main()

{

    std::ios::sync_with_stdio(false); cin.tie(0);

    //freopen("","r",stdin);

    //freopen("","w",stdout);

    string s;

    cin >> s;

    ll n;

    cin >> n;

    for (ll i = 0; i < n; i++)

    {

    	cin >> E[i].F >> E[i].S;

    }

    if (s.size() == 1)

    {

    	cout << "YES" << '\n';

    	return 0;

    }

    s = "a" + s + "a";



    //cout << s << endl;

	for (ll i = 0; i < s.size()-1; i++)

    {

    	val[i] = (s[i+1] - s[i] + 26) % 26;

    	//cout << "(" << val[i] << "[" << i << "," << i+1 << "]) ";

    }

    //cout << endl;



    for (ll i = 0; i < n; i++)

    {

    	//val[ E[i].F-1 ] = (val[ E[i].F-1 ] + 1) % 26;

    	//val[ E[i].S ] = (val[ E[i].S ] - 1 + 26) % 26;

    	G[E[i].F-1].pb( E[i].S );

    	G[ E[i].S ].pb(E[i].F-1);

    }

    /*

    for (ll i = 0; i < s.size()-1; i++)

    {

    	cout << "(" << val[i] << "[" << i << "," << i+1 << "]) ";

    }

    cout << endl;

    */

    for (ll i = 0; i < s.size()-1; i++)

    {

    	G[i].pb( s.size()-2-i );

    }

    clr(vis, false);

    bool poss = true;

    for (ll i = 0; i < s.size()-1; i++)

    {

    	if (vis[i]) continue;

    	//cout << "component: " << endl;

    	sum = 0;

    	dfs(i);

    	//cout << endl << "===============" << endl;

    	if (sum != 0) poss = false;

    }

    if (poss) cout << "YES" << '\n';

    else cout << "NO" << '\n';

    return 0;

}

// PLUS ULTRA!!!!