#include<iostream>
#include<unordered_map>
using namespace std;
const int N=1e6+10;
long long f[N];
int main(void)
{
// 建立字符到数值的映射表
unordered_map<char,int> mp;
mp['P']=3;
mp['p']=2;
mp['G']=1;
mp['g']=0;
mp['m']=0;
string s;
cin>>s;
// 将字符串的每个字符转换为对应的分值,存储到f数组
for(int i=1;i<=s.size();i++)
{
f[i] = mp[s[i-1]];
}
// 计算前缀和数组
for(int i=1;i<=s.size();i++)
{
f[i] = f[i-1] + f[i]; // 前缀和递推公式
}
int q;
cin>>q;
// 处理q次区间查询
for(int i=1;i<=q;i++)
{
int l,r;
cin>>l>>r;
// 公式:前r个字符和 - 前l-1个字符和
cout<<f[r] - f[l-1]<<endl;
}
return 0;
}