【PAT B級】PATはいくつかあります


タイトルの説明:
文字列APPAPTには2つの単語PATが含まれており、そのうち第1のPATは第2位§、第4位(A)、第6位(T)である.2番目のPATは3位§,4位(A),6位(T)である.
ここで与えられた文字列は、全部で何個のPATを形成することができますか?
入力形式:
入力は1行のみで、文字列が1つ含まれ、長さは105を超えず、P、A、Tの3つのアルファベットのみが含まれます.
出力フォーマット:
与えられた文字列に含まれるPATの数を1行に出力します.結果は比較的大きい可能性があるので、100000007に対して余剰数を取った結果のみ出力します.
サンプルを入力:
APPAPT

出力サンプル:
2

コード:
#include 
#include 
using namespace std;
int main() {
     
    char c; int p=0, pa=0, pat=0;
    while(scanf("%c", &c) && c!=' ' && c!='
'
) { if(c == 'P') { p++; } else if(c == 'A') { pa += p; pa = pa%1000000007; } else { pat += pa; pat = pat%1000000007; } } printf("%d
"
, pat); return 0; }