/*
本題按照題意,設定兩個二維數組,分别記錄水準連接配接和垂直連接配接即可。
最坑的地方在于垂直連接配接時候,是先輸入列,再輸入行,這點注意。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<vector>
#include<utility>
#include<unordered_set>
#include<unordered_map>
#include<string.h>
using namespace std;
//#define nmax 10000
//auto fin=fopen("UVa.in","r");
//int cmp(const void *a,const void *b){return *(int *)a<*(int *)b;}
int vlink[11][11],hlink[11][11];
int is_squ(int x,int y,int v){
for(int i=x;i<x+v;++i){
if(vlink[i][y]==0||vlink[i][y+v]==0)return 0;
}
for(int i=y;i<y+v;++i){
if(hlink[x][i]==0||hlink[x+v][i]==0)return 0;
}
return 1;
}
void printm(){
for(int i=1;i<10;++i){
for(int j=1;j<10;++j)printf("%3d",hlink[i][j]+vlink[i][j]);
printf("\n");
}
}
int main()
{
char s[10];
int cnt[11];
int n,m,x,y,flag,kase=0;
while(scanf("%d%d",&n,&m)==2&&n){
flag=1;
memset(cnt,0,sizeof(cnt));
memset(vlink,0,sizeof(vlink));
memset(hlink,0,sizeof(hlink));
for(int i=0;i<m;++i){
scanf("%s%d%d",s,&x,&y);
if(s[0]=='H')hlink[x][y]=1;
if(s[0]=='V')vlink[y][x]=1;
}
//printm();
for(int x=1;x<n;++x){
for(int y=1;y<n;++y){
for(int v=1;v<=min(n-x,n-y);++v){
if(is_squ(x,y,v))++cnt[v];
}
}
}
if(kase++)printf("\n**********************************\n\n");
printf("Problem #%d\n\n",kase);
for(int i=1;i<n;++i){
if(cnt[i]>0){
flag=0;
printf("%d square (s) of size %d\n",cnt[i],i);
}
}
if(flag)printf("No completed squares can be found.\n");
}
return 0;
}