//记录每个点左边的G的个数(代码中数组b),包括该点,右边的R的个数(代码中数组f),不包括该点,然后

//然后找到b[i]+f[i]的最小值

#include <iostream>

#include <string>

#include <vector>

using namespace std;

int main(int argc,char* argv[]){

    string s("RGRGR");

    cin>>s;

    int n=(int)s.length();

    int count_1=0;

    vector<int> b(n,0);

    vector<int> f(n,0);

    for(int i=0;i<n;i++){

        if(s[i]=='G')

            count_1++;

        b[i]=count_1;

    }

    int count_2=0;

    for(int i=n-2;i>=0;i--){

        if(s[i+1]=='R')

            count_2++;

        f[i]=count_2;

    }

    int mm=0x7FFFFFFF;

    for(int i=0;i<n;i++){

        if(b[i]+f[i]<mm){

            mm=b[i]+f[i];

        }

    }

    if(n==0) mm=0;

    cout<<mm<<endl;

}

//暴力和比较优的都写了,作对比。

#include <iostream>

#include <string>

#include <vector>

using namespace std;

bool isTrue(long num){

    if(num<10) return false;

    else{

        int a=0,b=0;

        a=num%10;

        b=(num/10)%10;

        return a==b;

    }

    return false;

}

long count(long num){

    if(num<10) return 0;

    else{

        long n100=num/100;

        num=num%100;

        long n1=num%10;

        long n10=num/10;

        long ans;

        if(n1>=n10){

            ans=n100*10+n10;

        }

        else{

            ans=n100*10+n10-1;

        }

        return ans;

    }

    return 0;

}

int main(int argc,char* argv[]){

    long L=0,R=0;

    cin>>L>>R;

    cout<<count(R)-count(L-1)<<endl;

    long cnt=0;

    for(long i=L;i<=R;i++){

        if(isTrue(i))

            cnt++;

    }

    cout<<cnt<<endl;

    return 0;

}

//找到规律就好

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

int main(int argc,char* argv[]){

    int n=0;

    cin>>n;

    vector<int> mvec(n,0);

    for(int i=0;i<n;i++){

        cin>>mvec[i];

    }

    sort(mvec.begin(),mvec.end());

    long ans=1;

    for(int i=0;i<n;i++){

        ans*=mvec[i]-i;

        if(ans>1000000007){

            ans=ans%1000000007;

        }

    }

    cout<<ans<<endl;

}