#include #define MOD 1000000007 using namespace std; inline int add(int x,int y) { return (x+y>=MOD)?x+y-MOD:x+y; } int f[1<<21][21]; bool vis[1<<21]; char str[2500000]; int main() { int cases; scanf("%d",&cases); for(;cases;cases--) { scanf("%s",str+1); int n=strlen(str+1)+1; for(int i=0;i<=n;i++) { memset(f[i],0,sizeof(f[i])); vis[i]=0; } int s=0; for(int i=1;i<=n;i++) { s++; if (str[i]!='+') vis[s]=1; } for(int i=0;i<=20;i++) f[0][i]=1; for(int i=1;i<=n;i++) { if (vis[i]) { for(int j=0;j<=20;j++) if ((i>>j)&1) f[i][0]=add(f[i][0],f[i^(1<>(j-1))&1) f[i][j]=add(f[i][j-1],f[i^(1<<(j-1))][j-1]); else f[i][j]=f[i][j-1]; } printf("%d %I64d\n",n,f[n][0]); } return 0; }