#include <stdio.h>
typedef long long int lld;
typedef unsigned long long int llu;
#define MAX(x,y) (x > y ? x : y)
#define MIN(x,y) (x < y ? x : y)
#define INF (long long int)(9223372036854775807)
#define IINF (int)(2147483647)
#include <stdlib.h>

typedef struct tree {
  lld value;
  struct tree *left;
  struct tree *right;
} tree_t;

int search_and_insert(tree_t *tree, lld value) {
  if (value == tree->value) {
    return 0;
  } else if (value < tree->value) {
    if (tree->left == NULL) {
      tree->left = malloc(sizeof(tree_t));
      tree->left->value = value;
      tree->left->left = NULL;
      tree->left->right = NULL;
      return 1;
    } else {
      return search_and_insert(tree->left, value);
    }
  } else {
    if (tree->right == NULL) {
      tree->right = malloc(sizeof(tree_t));
      tree->right->value = value;
      tree->right->left = NULL;
      tree->right->right = NULL;
      return 1;
    } else {
      return search_and_insert(tree->right, value);
    }
  }
}

void free_tree(tree_t *tree) {
  if (tree->left != NULL) {
    free_tree(tree->left);
  }
  if (tree->right != NULL) {
    free_tree(tree->right);
  }
  free(tree);
}

int main(void) {
  int n;
  lld q, r = 0;
  unsigned char c;
  tree_t *tree = NULL;
  scanf("%d\n", &n);
  for (int i = 0; i < n; i++) {
    q = 0;
    while (1) {
      c = getchar();
      if (c == '\n') {
        break;
      }
      q *= 27;
      q += c - 'a' + 1;
    }
    if (tree != NULL) {
      r += search_and_insert(tree, q);
    } else {
      tree = malloc(sizeof(tree_t));
      tree->value = q;
      tree->left = NULL;
      tree->right = NULL;
      r += 1;
    }
  }
  
  free_tree(tree);

  printf("%lld\n", r);
}
