All pastes #398714 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-03-17 13:52 UTC
rendered paste body
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<numeric>
#include<cmath>
using namespace std;

#define ALL(t) t.begin(),t.end()
#define FOR(i,n) for (int i=0; i<(n); i++)
#define FOREACH(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++)
typedef vector<int> vi;
typedef long long int64;

int main() {
int c,n;
scanf("%d",&c);
while (c--) {
char buf[30][30];
vector<string> t[30][30],t2[30][30];
scanf("%d",&n);
FOR(i,n) scanf(" %s",buf[i]);
FOR(i,n) FOR(j,n) { char s[2]={buf[i][j]}; t[i][j].push_back(s); }
for (int len=2; len<30; len++) {
FOR(i,n) FOR(j,n) {
t2[i][j].clear();
for (int dx=-1; dx<=1; dx++) for (int dy=-1; dy<=1; dy++) if ((dx || dy) && i+dx>=0 && i+dx<n && j+dy>=0 && j+dy<n &&
buf[i+dx][j+dy]>buf[i][j]) FOR(k,t[i+dx][j+dy].size()) t2[i][j].push_back(string(1,buf[i][j])+t[i+dx][j+dy][k]);
}
FOR(i,n) FOR(j,n) t[i][j]=t2[i][j];
if (len>2) {
vector<string> s;
FOR(i,n) FOR(j,n) FOR(k,t[i][j].size()) s.push_back(t[i][j][k]);
sort(s.begin(),s.end());
s.erase(unique(s.begin(),s.end()),s.end());
FOR(k,s.size()) printf("%s\n",s[k].c_str());
}
}
if (c) printf("\n");
}
return 0;
}