<prompt> Tumia mti wa mwisho katika C . Nambari za kuingiza zina herufi tu kutoka kwa alfabeti ndogo ya Kiingereza a hadi z.  <response>: Sure, heres an implementation of a suffix tree in C.include include include using namespace std;class SuffixTree private: struct Node int start; int end; Node suffixLink; unordered_map children; Nodeint start, int end this-start start; this-end end; suffixLink nullptr; int getLength return minend, inttext.size - start; string getText return text.substrstart, getLength; void addChildNode node char c textnode-start; childrenc node; ; Node root; Node activeNode; int activeEdge; int activeLength; int remaining; string text;public: SuffixTreestring text this-text text; root new Node-1, -1; activeNode root; activeEdge -1; activeLength 0; remaining 0; build; void print printHelperroot, 0; private: Node splitNode node if activeLength 0 return node; char startChar textnode-start activeEdge; Node child node-childrenstartChar; int splitEnd node-start activeEdge activeLength - 1; if child-getLength activeLength return child; Node splitNode new Nodechild-start, child-start activeLength; node-addChildsplitNode; child-start activeLength; splitNode-addChildchild; return splitNode; void extendint index remaining; Node lastNode nullptr; while remaining 0 if activeLength 0 activeEdge index; char nextChar textindex; if activeNode-childrennextChar nullptr Node newNode new Nodeindex, text.size; activeNode-addChildnewNode; if lastNode ! nullptr lastNode-suffixLink activeNode; lastNode activeNode; else Node nextNode activeNode-childrennextChar; if walkDownnextNode continue; char nextChar2 textnextNode-start activeLength; if nextChar nextChar2 activeLength; if lastNode ! nullptr lastNode-suffixLink activeNode; break; Node splitNode splitnextNode; Node newNode new Nodeindex, text.size; activeNode-addChildsplitNode; newNode-addChildsplitNode; activeNode-addChildnewNode; if lastNode ! nullptr lastNode-suffixLink newNode; lastNode newNode; remaining--; if activeNode root activeLength 0 activeLength--; activeEdge index - remaining 1; else activeNode activeNode-suffixLink ! nullptr ? activeNode-suffixLink : root; bool walkDownNode node int length node-getLength; if activeLength length activeEdge length; activeLength - length; activeNode node; return true; return false; void build for int i 0; i text.size; i extendi; void printHelperNode node, int level cout stringlevel 2, node-getText endl; for auto child : node-children printHelperchild.second, level 1; ;int main string text abcabxabcd; SuffixTree sttext; st.print; return 0; 