http://acm.pku.edu.cn/JudgeOnline/problem?id=1053

Код:
#include<iostream>
#include<string.h>
using namespace std;
char card[1000][20];
bool judge (int i,int j,int k) {
  int p;
  for(p=0;p<4;p++)
    if(!(
	card[i][p]==card[j][p]&&card[i][p]==card[k][p]&&card[j][p]==card[k][p]||
	card[i][p]!=card[j][p]&&card[i][p]!=card[k][p]&&card[j][p]!=card[k][p]
	)) return false;
  return true; }
int main() {
  int n;
  do{
    n=0;
    cin.getline(card[n++],100);
    if(!cin)break;
    while(strlen(card[n-1])==4) cin.getline(card[n++],100);
    n--;
    int i,j,k,num;
    num=0;
    cout<<"CARDS: ";
    for(i=0;i<n;i++) cout<<' '<<card[i];         cout<<endl;
    cout<<"SETS:   ";
    for(i=0;i<n;i++)
      for(j=i+1;j<n;j++)
	for(k=j+1;k<n;k++) {
	  if(judge(i,j,k)) {
	    num++;
	    if (num>1) cout<<"        ";
	    cout<<num<<".  "<<card[i]<<' '<<card[j]<<' '<<card[k]<<endl;
	   } }
    if(num==0) {cout<<"*** None Found ***"<<endl;  }
    cout<<endl;
    }while(cin); 
}