#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
  unsigned char count[26];
  char orig[32];
} word;

void read_word(char *line, word *w) {
  int i;
  char c;
  strncpy(w->orig, line, 32);
  for (i=0; w->orig[i]>=32; i++) {
    c = w->orig[i];
    if (c>='A' && c<='Z') c += 32;
    if (c>='a' && c<='z') (w->count[c - 'a'])++;
  }
  w->orig[i] = 0;
}

int cmp(const void *av, const void *bv) {
  int i, d;
  word *a = (word *) av;
  word *b = (word *) bv;
  for (i=0; i<26; i++) if ((d = b->count[i] - a->count[i]) != 0) return d;
  return 0;
}

int main(int argc, char *argv[]) {
  word words[50000];
  int len=32;
  char line[len];
  int n, i, in_block;

  for (n=0; !feof(stdin); n++) {
    if (fgets(line, len, stdin)==NULL) break;
    read_word(line, &words[n]);
  }

  qsort(words, n, sizeof(word), &cmp);

  in_block = 0;
  for (i=1; i<n; i++) {
    if (cmp(&words[i], &words[i-1]) == 0) {
      if (in_block == 0) {
	in_block = 1;
	fputs(words[i-1].orig, stdout);
	putchar(' ');
      }
      fputs(words[i].orig, stdout);
      putchar(' ');
    } else {
      if (in_block == 1) {
	in_block = 0;
	putchar('\n');
      }
    }
  }

  return 0;
}

