#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;
}