Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using ll = long long;
- #define MOD 998244353
- #define MOD2 1000000007
- #define vt vector
- #define endl '\n'
- #define pb push_back
- #define pf push_front
- #define all(x) x.begin(),x.end()
- #define sz(x) (int)((x).size())
- #define uset unordered_set
- #define umap unordered_map
- #define mset multiset
- #define fi first
- #define se second
- #define rep(i,a,b) for(int i=a;i<b;i++)
- #define rrep(i,a,b) for(int i=a;i>=b;i--)
- #define each(i,a) for(auto &i:a)
- struct pii {
- int x, y;
- bool operator<(const pii &a) const { return x == a.x ? y < a.y : x < a.x; }
- bool operator>(const pii &a) const { return x == a.x ? y > a.y : x > a.x; }
- bool operator==(const pii &a) const { return x == a.x && y == a.y; }
- bool operator!=(const pii &a) const { return x != a.x || y != a.y; }
- pii operator+(const pii &a) const { return {x+a.x, y+a.y}; }
- pii operator-(const pii &a) const { return {x-a.x, y-a.y}; }
- pii operator*(const int &a) const { return {x*a, y*a}; }
- pii operator/(const int &a) const { return {x/a, y/a}; }
- };
- struct pll {
- ll x, y;
- bool operator<(const pll &a) const { return x == a.x ? y < a.y : x < a.x; }
- bool operator>(const pll &a) const { return x == a.x ? y > a.y : x > a.x; }
- bool operator==(const pll &a) const { return x == a.x && y == a.y; }
- bool operator!=(const pll &a) const { return x != a.x || y != a.y; }
- pll operator+(const pll &a) const { return {x+a.x, y+a.y}; }
- pll operator-(const pll &a) const { return {x-a.x, y-a.y}; }
- pll operator*(const ll &a) const { return {x*a, y*a}; }
- pll operator/(const ll &a) const { return {x/a, y/a}; }
- };
- template<class T> bool ckmin(T& a, const T& b) {
- return b < a ? a = b, 1 : 0; }
- template<class T> bool ckmax(T& a, const T& b) {
- return a < b ? a = b, 1 : 0; }
- int T, N;
- int a[200005];
- int main() {
- ios::sync_with_stdio(0);
- cin.tie(0);
- map<string,set<string>> adj;
- set<string> tot;
- string s;
- while (cin >> s) {
- string u = s.substr(0,2);
- string v = s.substr(3,2);
- tot.insert(u);
- tot.insert(v);
- adj[u].insert(v);
- adj[v].insert(u);
- }
- vt<string> v;
- for (auto &i:tot) {
- v.pb(i);
- }
- cout << sz(v) << endl;
- sort(all(v));
- //find maximal clique
- rep(i,0,sz(v)) {
- rep(j,i+1,sz(v)) {
- if (adj[v[i]].find(v[j]) == adj[v[i]].end()) {
- continue;
- }
- rep(k,j+1,sz(v)) {
- if (adj[v[i]].find(v[k]) == adj[v[i]].end() || adj[v[j]].find(v[k]) == adj[v[j]].end()) {
- continue;
- }
- rep(l,k+1,sz(v)) {
- if (adj[v[i]].find(v[l]) == adj[v[i]].end() || adj[v[j]].find(v[l]) == adj[v[j]].end() || adj[v[k]].find(v[l]) == adj[v[k]].end()) {
- continue;
- }
- rep(m,l+1,sz(v)) {
- if (adj[v[i]].find(v[m]) == adj[v[i]].end() || adj[v[j]].find(v[m]) == adj[v[j]].end() || adj[v[k]].find(v[m]) == adj[v[k]].end() || adj[v[l]].find(v[m]) == adj[v[l]].end()) {
- continue;
- }
- rep(n,m+1,sz(v)) {
- if (adj[v[i]].find(v[n]) == adj[v[i]].end() || adj[v[j]].find(v[n]) == adj[v[j]].end() || adj[v[k]].find(v[n]) == adj[v[k]].end() || adj[v[l]].find(v[n]) == adj[v[l]].end() || adj[v[m]].find(v[n]) == adj[v[m]].end()) {
- continue;
- }
- rep(o,n+1,sz(v)) {
- if (adj[v[i]].find(v[o]) == adj[v[i]].end() || adj[v[j]].find(v[o]) == adj[v[j]].end() || adj[v[k]].find(v[o]) == adj[v[k]].end() || adj[v[l]].find(v[o]) == adj[v[l]].end() || adj[v[m]].find(v[o]) == adj[v[m]].end() || adj[v[n]].find(v[o]) == adj[v[n]].end()) {
- continue;
- }
- rep(p,o+1,sz(v)) {
- if (adj[v[i]].find(v[p]) == adj[v[i]].end() || adj[v[j]].find(v[p]) == adj[v[j]].end() || adj[v[k]].find(v[p]) == adj[v[k]].end() || adj[v[l]].find(v[p]) == adj[v[l]].end() || adj[v[m]].find(v[p]) == adj[v[m]].end() || adj[v[n]].find(v[p]) == adj[v[n]].end() || adj[v[o]].find(v[p]) == adj[v[o]].end()) {
- continue;
- }
- rep(q,p+1,sz(v)) {
- if (adj[v[i]].find(v[q]) == adj[v[i]].end() || adj[v[j]].find(v[q]) == adj[v[j]].end() || adj[v[k]].find(v[q]) == adj[v[k]].end() || adj[v[l]].find(v[q]) == adj[v[l]].end() || adj[v[m]].find(v[q]) == adj[v[m]].end() || adj[v[n]].find(v[q]) == adj[v[n]].end() || adj[v[o]].find(v[q]) == adj[v[o]].end() || adj[v[p]].find(v[q]) == adj[v[p]].end()) {
- continue;
- }
- rep(r,q+1,sz(v)) {
- if (adj[v[i]].find(v[r]) == adj[v[i]].end() || adj[v[j]].find(v[r]) == adj[v[j]].end() || adj[v[k]].find(v[r]) == adj[v[k]].end() || adj[v[l]].find(v[r]) == adj[v[l]].end() || adj[v[m]].find(v[r]) == adj[v[m]].end() || adj[v[n]].find(v[r]) == adj[v[n]].end() || adj[v[o]].find(v[r]) == adj[v[o]].end() || adj[v[p]].find(v[r]) == adj[v[p]].end() || adj[v[q]].find(v[r]) == adj[v[q]].end()) {
- continue;
- }
- rep(s,r+1,sz(v)) {
- if (adj[v[i]].find(v[s]) == adj[v[i]].end() || adj[v[j]].find(v[s]) == adj[v[j]].end() || adj[v[k]].find(v[s]) == adj[v[k]].end() || adj[v[l]].find(v[s]) == adj[v[l]].end() || adj[v[m]].find(v[s]) == adj[v[m]].end() || adj[v[n]].find(v[s]) == adj[v[n]].end() || adj[v[o]].find(v[s]) == adj[v[o]].end() || adj[v[p]].find(v[s]) == adj[v[p]].end() || adj[v[q]].find(v[s]) == adj[v[q]].end() || adj[v[r]].find(v[s]) == adj[v[r]].end()) {
- continue;
- }
- rep(t,s+1,sz(v)) {
- if (adj[v[i]].find(v[t]) == adj[v[i]].end() || adj[v[j]].find(v[t]) == adj[v[j]].end() || adj[v[k]].find(v[t]) == adj[v[k]].end() || adj[v[l]].find(v[t]) == adj[v[l]].end() || adj[v[m]].find(v[t]) == adj[v[m]].end() || adj[v[n]].find(v[t]) == adj[v[n]].end() || adj[v[o]].find(v[t]) == adj[v[o]].end() || adj[v[p]].find(v[t]) == adj[v[p]].end() || adj[v[q]].find(v[t]) == adj[v[q]].end() || adj[v[r]].find(v[t]) == adj[v[r]].end() || adj[v[s]].find(v[t]) == adj[v[s]].end()) {
- continue;
- }
- rep(u,t+1,sz(v)) {
- if (adj[v[i]].find(v[u]) == adj[v[i]].end() || adj[v[j]].find(v[u]) == adj[v[j]].end() || adj[v[k]].find(v[u]) == adj[v[k]].end() || adj[v[l]].find(v[u]) == adj[v[l]].end() || adj[v[m]].find(v[u]) == adj[v[m]].end() || adj[v[n]].find(v[u]) == adj[v[n]].end() || adj[v[o]].find(v[u]) == adj[v[o]].end() || adj[v[p]].find(v[u]) == adj[v[p]].end() || adj[v[q]].find(v[u]) == adj[v[q]].end() || adj[v[r]].find(v[u]) == adj[v[r]].end() || adj[v[s]].find(v[u]) == adj[v[s]].end() || adj[v[t]].find(v[u]) == adj[v[t]].end()) {
- continue;
- }
- cout << v[i] << "," << v[j] << "," << v[k] << "," << v[l] << "," << v[m] << "," << v[n] << "," << v[o] << "," << v[p] << "," << v[q] << "," << v[r] << "," << v[s] << "," << v[t] << "," << v[u] << endl;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement