Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #pragma comment (linker,"/STACK:256000000")
- #include <iostream>
- #include <stdio.h>
- #include <algorithm>
- #include <set>
- #include <map>
- #include <queue>
- #include <stack>
- #include <deque>
- #include <vector>
- #include <cassert>
- #include <string>
- using namespace std;
- #define INF 1000000000
- #define lint long long
- #define pb push_back
- #define MOD 1000000007
- #define mp make_pair
- string s[20005];
- pair <string, int> a[20005];
- vector <string> gr[20005];
- char islow(char c) {
- return c >= 'a' && c <= 'z';
- }
- int main() {
- int n;
- scanf("%d", &n);
- for (int i = 0; i < n; ++i) {
- cin >> s[i];
- int at = 0;
- string dom;
- string log;
- for (int j = 0; j < s[i].size(); ++j) {
- if (at) {
- if (s[i][j] == '.' || islow(s[i][j]))
- dom += s[i][j];
- else dom += char(s[i][j] - 'A' + 'a');
- }
- if (s[i][j] == '@')
- at = 1;
- }
- if (dom == "bmail.com") {
- for (int j = 0; j < s[i].size(); ++j) {
- if (s[i][j] == '+')
- break;
- if (s[i][j] == '.')
- continue;
- if (s[i][j] == '@')
- break;
- if (islow(s[i][j]))
- log += s[i][j];
- else log += char(s[i][j] - 'A' + 'a');
- }
- }
- else {
- for (int j = 0; j < s[i].size(); ++j) {
- if (s[i][j] == '@')
- break;
- if (islow(s[i][j]))
- log += s[i][j];
- else log += char(s[i][j] - 'A' + 'a');
- }
- }
- a[i] = mp(log + dom, i);
- }
- sort(a, a + n);
- int g = 1;
- gr[0].pb(s[a[0].second]);
- for (int i = 1; i < n; ++i) {
- if (a[i].first != a[i - 1].first) {
- gr[g++].pb(s[a[i].second]);
- }
- else {
- gr[g - 1].pb(s[a[i].second]);
- }
- }
- printf("%d\n", g);
- for (int i = 0; i < g; ++i) {
- cout << gr[i].size() << " ";
- for (int j = 0; j < gr[i].size(); ++j) {
- cout << gr[i][j] << " ";
- }
- cout << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement