<?php
class DSU {
private $sz, $par;
public function __construct($n) {
$this->par = range(0, $n - 1); }
public function getPar($u) {
if ($u == $this->par[$u]) {
return $u;
}
return $this->par[$u] = $this->getPar($this->par[$u]);
}
public function connect($u, $v) {
$u = $this->getPar($u);
$v = $this->getPar($v);
if ($u != $v) {
if ($this->sz[$u] < $this->sz[$v]) {
}
$this->sz[$u] += $this->sz[$v];
$this->par[$v] = $u;
}
}
}
function unique(&$s) {
}
$dsu = new DSU(26);
for ($i = 0; $i < $n; $i++) {
unique($s);
foreach ($s as $ch) {
$used[ord($ch) - ord('a')] = true; }
for ($j = 0; $j < $k - 1; $j++) {
$dsu->connect(ord($s[$j]) - ord('a'), ord($s[$j + 1]) - ord('a')); }
}
$parents = [];
for ($i = 0; $i < 26; $i++) {
if ($used[$i]) {
$parents[] = $dsu->getPar($i);
}
}
unique($parents);
echo count($parents) . "\n";
PD9waHAKY2xhc3MgRFNVIHsKICAgIHByaXZhdGUgJHN6LCAkcGFyOwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG4pIHsKICAgICAgICAkdGhpcy0+c3ogPSBhcnJheV9maWxsKDAsICRuLCAxKTsKICAgICAgICAkdGhpcy0+cGFyID0gcmFuZ2UoMCwgJG4gLSAxKTsKICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcigkdSkgewogICAgICAgIGlmICgkdSA9PSAkdGhpcy0+cGFyWyR1XSkgewogICAgICAgICAgICByZXR1cm4gJHU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+cGFyWyR1XSA9ICR0aGlzLT5nZXRQYXIoJHRoaXMtPnBhclskdV0pOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gY29ubmVjdCgkdSwgJHYpIHsKICAgICAgICAkdSA9ICR0aGlzLT5nZXRQYXIoJHUpOwogICAgICAgICR2ID0gJHRoaXMtPmdldFBhcigkdik7CiAgICAgICAgaWYgKCR1ICE9ICR2KSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+c3pbJHVdIDwgJHRoaXMtPnN6WyR2XSkgewogICAgICAgICAgICAgICAgbGlzdCgkdSwgJHYpID0gYXJyYXkoJHYsICR1KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+c3pbJHVdICs9ICR0aGlzLT5zelskdl07CiAgICAgICAgICAgICR0aGlzLT5wYXJbJHZdID0gJHU7CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiB1bmlxdWUoJiRzKSB7CiAgICAkcyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJHMpKTsKfQoKJGRzdSA9IG5ldyBEU1UoMjYpOwoKZnNjYW5mKFNURElOLCAiJWQiLCAkbik7CiR1c2VkID0gYXJyYXlfZmlsbCgwLCAyNiwgZmFsc2UpOwoKZm9yICgkaSA9IDA7ICRpIDwgJG47ICRpKyspIHsKICAgICRzID0gc3RyX3NwbGl0KHRyaW0oZmdldHMoU1RESU4pKSk7CiAgICBzb3J0KCRzKTsKICAgIHVuaXF1ZSgkcyk7CiAgICBmb3JlYWNoICgkcyBhcyAkY2gpIHsKICAgICAgICAkdXNlZFtvcmQoJGNoKSAtIG9yZCgnYScpXSA9IHRydWU7CiAgICB9CiAgICAkayA9IGNvdW50KCRzKTsKICAgIGZvciAoJGogPSAwOyAkaiA8ICRrIC0gMTsgJGorKykgewogICAgICAgICRkc3UtPmNvbm5lY3Qob3JkKCRzWyRqXSkgLSBvcmQoJ2EnKSwgb3JkKCRzWyRqICsgMV0pIC0gb3JkKCdhJykpOwogICAgfQp9CgokcGFyZW50cyA9IFtdOwpmb3IgKCRpID0gMDsgJGkgPCAyNjsgJGkrKykgewogICAgaWYgKCR1c2VkWyRpXSkgewogICAgICAgICRwYXJlbnRzW10gPSAkZHN1LT5nZXRQYXIoJGkpOwogICAgfQp9CnNvcnQoJHBhcmVudHMpOwp1bmlxdWUoJHBhcmVudHMpOwplY2hvIGNvdW50KCRwYXJlbnRzKSAuICJcbiI7Cg==