XML 38 R31.htm IDEA: XBRL DOCUMENT
v3.26.1

Net Income (Loss) Per Common Share (Tables) | 3 Months Ended
--- | ---
Apr. 30, 2026
Earnings Per Share [Abstract] |
Summary of Basic and Diluted Net Income (Loss) Per Share | A reconciliation of the shares used in calculating basic and diluted net income (loss) per share is as follows:
|  | Three Months Ended |  |  |
|  | April 30, 2026 |  |  | April 30, 2025 |  |  |
Weighted Average Common Shares Outstanding – Basic |  |  | 7,677,974 |  |  |  | 7,559,704 |  |  |
Effect of Dilutive Options, Restricted Stock Awards and Restricted Stock Units |  |  | 96,341 |  |  |  | — |  | (1) |
Weighted Average Common Shares Outstanding – Diluted |  |  | 7,774,315 |  |  |  | 7,559,704 |  |  |
(1) For the three months ended April 30, 2025 we had weighted average common stock equivalent shares outstanding of 67,066 that could potentially dilute earnings per share in future periods. These shares were excluded from the computation of diluted earnings per share because their effect would have been anti-dilutive given the net loss during the period.

X
- References No definition available. + Details
Name: | us-gaap_EarningsPerShareAbstract
Namespace Prefix: | us-gaap_
Data Type: | xbrli:stringItemType
Balance Type: | na
Period Type: | duration

X
- Definition Tabular disclosure of the weighted average number of shares used in calculating basic net earnings per share (or unit) and diluted earnings per share (or unit). + References Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef -Name Accounting Standards Codification -Topic 260 -SubTopic 10 -Section 50 -Paragraph 1 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482662/260-10-50-1 + Details
Name: | us-gaap_ScheduleOfWeightedAverageNumberOfSharesTableTextBlock
Namespace Prefix: | us-gaap_
Data Type: | dtr-types:textBlockItemType
Balance Type: | na
Period Type: | duration