fork download
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4. #include <vector>
  5. #include<cstdio>
  6. #include <math.h>
  7. #include <vector>
  8. #include <deque>
  9. #include <string>
  10. #include <set>
  11. #include <map>
  12. #include <queue>
  13. #include <stdio.h>
  14. #include <cstdlib>
  15. #include <random>
  16. #include <chrono>
  17. #include <fstream>
  18. #include <algorithm>
  19. #include <array>
  20. #include <bitset>
  21. #include <cassert>
  22. #include <cstring>
  23. #include <cmath>
  24. #include <functional>
  25. #include <numeric>
  26. #include <iomanip>
  27. #include <iostream>
  28. #include <map>
  29. #include <set>
  30. #include <sstream>
  31. #include <string>
  32. #include <tuple>
  33. #include <unordered_map>
  34. #include <unordered_set>
  35. #include <vector>
  36. #include <memory>
  37. #include <queue>
  38. #include <random>
  39. #define ff first
  40. #define se second
  41. #define pb push_back
  42. #define nn 1100
  43. #define mt make_tuple
  44. #define mp make_pair
  45. #define ll long long int
  46. #define db double
  47. #define ldb long double
  48. #define inf 1000000000000000000ll
  49. #define logn 20
  50. #define mod1 mod
  51. #define M 1000000007
  52. #define sqr(a) a*1ll*a
  53. #define nullp mp(-1,-1)
  54. #define set0(a) memset(a,0,sizeof a)
  55. #define init(a) memset(a,-1,sizeof a)
  56. #define cmp 1e-16
  57. #define endl '\n'
  58. #define ff first
  59. #define se second
  60. #define pb push_back
  61. #define nn 1100
  62. #define mt make_tuple
  63. #define mp make_pair
  64. #define ll long long int
  65. #define db double
  66. #define ldb long double
  67. #define inf 1000000000000000000ll
  68. #define logn 20
  69. #define sqr(a) a*1ll*a
  70. #define nullp mp(-1,-1)
  71. #define set0(a) memset(a,0,sizeof a)
  72. #define init(a) memset(a,-1,sizeof a)
  73. #define cmp 1e-16
  74. #define li long long int
  75. #define f first
  76. #define s second
  77. #define ar array
  78. #define pb push_back
  79. #define forn(i, n) for(int i = 0; i < int(n); i++)
  80. #define fore(i, l, r) for(int i = l; i <r; i++)
  81. #define readi(x) scanf("%d",&x)
  82. #define reads(x) scanf("%s", x)
  83. #define readl(x) scanf("%I64d",&x)
  84. #define rep(i,n) for(i=0;i<n;i++)
  85. #define revp(i,n) for(i=(n-1);i>=0;i--)
  86. #define myrep1(i,a,b) for(i=a;i<=b;i++)
  87. #define myrep2(i,a,b) for(i=b;i>=a;i--)
  88. #define pb push_back
  89. #define mp make_pair
  90. #define fi first
  91. #define sec second
  92. #define MINN -1000000000000000000
  93. #define INTMAX 1000001000
  94. #define pic pair<int,char>
  95. #define lgn 20
  96. #define ddouble long double
  97. #define minus minu
  98. #define PI 3.1415926535
  99. #define lgn 20
  100. #define ff first
  101. #define se second
  102. #define pb push_back
  103. #define nn 1100
  104. #define mt make_tuple
  105. #define mp make_pair
  106. #define db double
  107. #define ldb long double
  108. #define inf 1000000000000000000ll
  109. #define logn 20
  110. #define sqr(a) a*1ll*a
  111. #define nullp mp(-1,-1)
  112. #define set0(a) memset(a,0,sizeof a)
  113. #define init(a) memset(a,-1,sizeof a)
  114. #define cmp 1e-16
  115. #define p(x) printf("%d\n", x)
  116. #define pl(x) printf("%lld\n", x)
  117. #define sl(x) scanf("%lld", &x)
  118. #define sf(x) scanf("%lf", &x)
  119. #define bitcount __builtin_popcountll
  120. #define INF 1e18+9
  121. #define mp make_pair
  122. #define fo(i,n) for(int i=0;i<n;i++)
  123. #define min3(a,b,c) min(a,min(b,c))
  124. #define max3(a,b,c) max(a,max(b,c))
  125. #define min4(a,b,c,d) min(a,min(b,min(c,d)))
  126. #define max4(a,b,c,d) max(a,max(b,max(c,d)))
  127. #define SQR(a) ((a)*(a))
  128. #define FOR(i,a,b) for(int i=a;i<=b;i++)
  129. #define ROF(i,a,b) for(int i=a;i>=b;i--)
  130. #define REP(i,b) for(int i=0;i<b;i++)
  131. #define MEM(a,x) memset(a,x,sizeof(a))
  132. #define ABS(x) ((x)<0?-(x):(x))
  133. #define SORT(v) sort(v.begin(),v.end())
  134. #define REV(v) reverse(v.begin(),v.end())
  135. #define fRead(x) freopen(x,"r",stdin)
  136. #define fWrite(x) freopen (x,"w",stdout)
  137. #define LL long long
  138. #define ULL unsigned long long
  139. #define sqr(a) a*1ll*a
  140. #define nullp mp(-1,-1)
  141. #define set0(a) memset(a,0,sizeof a)
  142. #define init(a) memset(a,-1,sizeof a)
  143. #define cmp 1e-16
  144. #define input1(a) long long int a;cin>>a;
  145. #define input2(p,q,r) long p,q,r;cin>>p>>q>>r;
  146. #define input3(i,a) for(long long int i=a;i<=1e18;i++)
  147. #define input4(i,p)for(int i=0;i<p.length();i++)
  148. #define vll vector<ll>
  149. #define ALL(x) (x).begin(), (x).end()
  150. #define SZ(x) ((int)(x).size())
  151. #define getx
  152. #define putx putchar_unlocked
  153. #define in(n) scanf("%d",&n)
  154. #define inl(n) scanf("%lld",&n)
  155. #define out(n) printf("%d",n);
  156. #define outl(n) printf("%lld",n);
  157. #define el putchar('\n')
  158. #define sp putchar(' ')
  159. #define fin cin.ignore(numeric_limits<streamsize>::max(),'\n')
  160. #define fout cout.flush()
  161. #define google cout<<"Case #"<<countu<<": "
  162. #define S(t) (ll)t.size()
  163. #define bl '\n'
  164. #define nl cout<<bl
  165. #define cout1(a) cout<<a<<bl
  166. #define cout2(a,b) cout<<a<<" "<<b<<bl
  167. #define cout3(a,b,c) cout<<a<<" "<<b<<" "<<c<<bl
  168. #define cout4(a,b,c,d) cout<<a<<" "<<b<<" "<<c<<" "<<d<<bl
  169. #define print(azz,szz,ezz) for(ll i=szz;i<=ezz;i++){ cout<<azz[i]<<" "; }
  170. #define rprint(azz,szz,ezz) for(ll i=szz;i>=ezz;i--){ cout<<azz[i]<<" "; }
  171. #define input(azz,szz,ezz) sfor(pzz,szz,ezz) cin>>azz[pzz]
  172. #define ldb long double
  173. #define db double
  174. #define lb lower_bound
  175. #define ub upper_bound
  176. #define pb push_back
  177. #define mk make_pair
  178. #define pldb pair<ldb,ldb>
  179. #define fi first
  180. #define se second
  181. #define vull vector<ull>
  182. #define vll vector<ll>
  183. #define vb vector<bool>
  184. #define vldb vector<ldb>
  185. #define vpll vector< pll >
  186. #define vpldb vector< pldb >
  187. #define mldb map<ldb,ldb>
  188. #define umll unordered_map<ll,ll>
  189. #define sll set<ll>
  190. #define usll unordered_set<ll>
  191. #define sfor(i,azz,bzz) for (ll i = (azz); i <= (bzz); ++i)
  192. #define rfor(i,bzz,azz) for (ll i = (bzz); i >= (azz); --i)
  193. #define sim template < class c
  194. #define ris return * this
  195. #define M2 998244353
  196. #define ld long double
  197. #define fl(i,a,b) for(ll i=a;i<b;i++)
  198. #define ff first
  199. #define ss second
  200. #define pb push_back
  201. #define mp make_pair
  202. #define vll vector<ll>
  203. #define sz(s) (int)s.size()
  204. #define ldb long double
  205. #define NINF LLONG_MIN
  206. #define PII 3.141592653589793238462643383279502884197169399375
  207. #define vp(vi,x) cin>>x; vi.pb(x);
  208. #define bsearch(a,x) binary_search(all(a),x)
  209. #define LB(a,x) (std::lower_bound(all(a),x)-a.B)
  210. #define UB(a,x) (std::upper_bound(all(a),x)-a.B)
  211. #define smallest(a) *min_element(a.begin(),a.end())
  212. #define largest(a) *max_element(a.begin(),a.end())
  213. #define all(a) a.begin(), a.end()
  214. #define sortdesc(a) sort(a.begin(),a.end(),greater<ll>())
  215. #define ps(x, y) fixed << setprecision(y) << x
  216. #define E end()
  217. #define B begin()
  218. #define yes cout<<"YES\n"
  219. #define no cout<<"NO\n"
  220. #define gcd __gcd
  221. #define lcm(a,b) ((a*b)/__gcd(a,b))
  222. #define ff first
  223. #define ss second
  224. #define pb push_back
  225. #define mp make_pair
  226. #define mii map<ll,ll>
  227. #define mci map<char,ll>
  228. #define msi map<string,ll>
  229. #define pqb priority_queue<ll>
  230. #define sg string
  231. #define emb emplace_back
  232. #define my_love ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  233. #define bug(x) cout<<#x<<" "<<x<<"\n"
  234. #define pqs priority_queue<ll, vi, greater<ll>>
  235. #define w(x) int x; cin >> x; while (x--)
  236. #define FIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  237. #define for0(i, n) for (ll i = 0; i < n; i++)
  238. #define for1(i, n) for (ll i = 1; i <= n; i++)
  239. #define loop(i, a, b) for (ll i = a; i < b; i++)
  240. #define bloop(i, a, b) for (ll i = a; i >= b; i--)
  241. #define trav(g,arr) for(auto g: arr) {cout<<g<<sp;} cout<<endl;
  242. #define MAX 1000001
  243. #define sgraph 200100LL
  244. #define segment 800100LL
  245. #define trace1(x) cerr<<#x<<": "<<x<<endl
  246. #define trace2(x, y) cerr<<#x<<": "<<x<<" | "<<#y<<": "<<y<<endl
  247. #define trace3(x, y, z) cerr<<#x<<":" <<x<<" | "<<#y<<": "<<y<<" |\
  248.   "<<#z<<": "<<z<<endl
  249. #define trace4(a, b, c, d) cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" |\
  250.   "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<endl
  251. #define trace5(a, b, c, d, e) cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" |\
  252.   "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<" | "<<#e<< ": "<<e<<endl
  253. #define trace6(a, b, c, d, e, f) cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" | "<<#c<<": "<< c<<" |\
  254.   "<<#d<<": "<<d<<" | "<<#e<< ": "<<e<<" | "<<#f<<": "<<f<<endl
  255.  
  256. #define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
  257.  
  258. #define shandom_ruffle random_shuffle
  259. #define mod2 100000009ll
  260. #define endl '\n'
  261. #define mod3 mod
  262. #define printv(v) for(ll i=0;i<v.size();i++) \
  263.   out v[i]<<" ";\
  264.   out "\n";
  265.  
  266. #define inv(v) for(ll i=0;i<v.size();i++)\
  267.   in v[i];
  268. #define goog(tno) cout << "Case #" << tno <<": "
  269. #define read(x) int x; cin >> x
  270. #define fr(a,b) for(int i = a; i < b; i++)
  271.  
  272.  
  273.  
  274. using namespace std;
  275. using namespace __gnu_pbds;
  276. #define TRACE
  277. #ifdef TRACE
  278. #define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
  279. template <typename Arg1>
  280. void __f(const char* name, Arg1&& arg1){
  281. cout << name << " : " << arg1 << endl;
  282.  
  283. }
  284. template <typename Arg1, typename... Args>
  285. void __f(const char* names, Arg1&& arg1, Args&&... args){
  286. const char* comma = strchr(names + 1, ','); cout.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
  287. }
  288. #else
  289. #define trace(...)
  290. #endif
  291.  
  292. //DEBUG
  293.  
  294. void __print(int x) {cerr << x;}
  295. void __print(long x) {cerr << x;}
  296. void __print(long long x) {cerr << x;}
  297. void __print(unsigned x) {cerr << x;}
  298. void __print(unsigned long x) {cerr << x;}
  299. void __print(unsigned long long x) {cerr << x;}
  300. void __print(float x) {cerr << x;}
  301. void __print(double x) {cerr << x;}
  302. void __print(long double x) {cerr << x;}
  303. void __print(char x) {cerr << '\'' << x << '\'';}
  304. void __print(const char *x) {cerr << '\"' << x << '\"';}
  305. void __print(const string &x) {cerr << '\"' << x << '\"';}
  306. void __print(bool x) {cerr << (x ? "true" : "false");}
  307. template<typename T, typename V>
  308. void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
  309. template<typename T>
  310. void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
  311. void _print() {cerr << "]\n";}
  312. template <typename T, typename... V>
  313. void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
  314. #ifndef ONLINE_JUDGE
  315. #define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
  316. #else
  317. #define debug(x...)
  318. #endif
  319. typedef pair<int,int> pii;
  320. typedef pair<ll,int> pli;
  321. typedef pair<int,ll> pil;
  322. typedef pair<ll,ll> pll;
  323. typedef pair<long double,long double> pdd;
  324. template<class T>
  325. using max_pq = priority_queue<T>;
  326. template<class T>
  327. using min_pq = priority_queue<T,vector<T>,greater<T>>;
  328. typedef tree<int, null_type, less<int>, rb_tree_tag,
  329. tree_order_statistics_node_update> OST;
  330.  
  331. template<class T> T gcd(T a,T b){return (b==0)?a:gcd(b,a%b);}
  332. ll pow(ll a,ll p,ll m)
  333. {ll res=1;while(p>0){if(p&1)res=(res*a)%m;a=(a*a)%M;p>>=1;}
  334. return res;}
  335.  
  336.  
  337. const ldb pi=3.141592653589793238462643383;
  338. const int MAXN = (int)((1e5) + 10);
  339. using vi = vector<int>;
  340. template<typename T>
  341. istream &operator>>(istream &in, vector<T> &vec) {
  342. for (auto &x : vec) {
  343. in >> x;
  344. }
  345. return in;
  346. }
  347.  
  348. ll divide(string s, ll x){
  349. vector <ll> a;
  350. for(int i = 0; i < s.size(); ++i){
  351. a.pb((ll)s[i] - '0');
  352. }
  353. ll temp = 0;
  354. for(int i = 0; i < a.size(); ++i){
  355. temp = temp *10 + a[i];
  356. if(temp >= x){
  357. temp %= x;
  358. }
  359. }
  360. return temp;
  361. }
  362.  
  363. int binexp1(int a, int b, int m){
  364. int result = 1;
  365. while(b>0){
  366. if(b & 1){
  367. result = (result * 1LL * a) % m;
  368. }
  369. a = (a * 1LL * a) % m;
  370. b >>= 1;
  371. }
  372. return result;
  373. }
  374.  
  375. long long multiply(long long a, long long b, long long m){
  376. long long result = 0;
  377. while(b>0){
  378. if(b & 1){
  379. result = result + a;
  380. result %= m;
  381. }
  382. a <<= 1;
  383. a %= m;
  384. b >>= 1;
  385. }
  386. return result;
  387. }
  388.  
  389. long long binexp2(long long a, long long b, long long m){
  390. long long result = 1;
  391. while(b>0){
  392. if(b & 1){
  393. result = multiply(result, a, m);
  394. }
  395. a = multiply(a, a, m);
  396. b >>= 1;
  397. }
  398. return result;
  399. }
  400. // dp with bitmask
  401. const int P = (1 << 21) + 5;
  402. int a[P];
  403. LL cnt[P];
  404. LL dp[P];
  405.  
  406. LL call(int mask,int m){
  407. if(mask == 0)return 0;
  408. if(dp[mask] != -1)return dp[mask];
  409. LL ret = 0;
  410. for(int i = 0;i < m;i++){
  411. if(mask & (1 << i)){
  412. ret = max(ret,(1LL << i) * cnt[mask] + call(mask ^ (1 << i),m));
  413. }
  414. }
  415. return dp[mask] = ret;
  416. }
  417. ll min(ll a,ll b)
  418. {
  419. return (a<=b?a:b);
  420. }
  421. ll max(ll a,ll b)
  422. {
  423. return (a>=b?a:b);
  424. }
  425. ll gd(ll a,ll b)
  426. {
  427. if(b==0)
  428. return a;
  429. return gd(b,a%b);
  430. }
  431. ll pwr(ll a,ll b)
  432. {
  433. ll res=0;
  434. while(b)
  435. {
  436. if(b%2==1)
  437. {
  438. res*=a;
  439. }
  440. a=a*a;
  441. b>>=1;
  442. }
  443. return res;
  444. }
  445. //Dinics max flow ALGO
  446.  
  447. struct FlowEdge {
  448. int v, u;
  449. long long cap, flow = 0;
  450. FlowEdge(int v, int u, long long cap) : v(v), u(u), cap(cap) {}
  451. };
  452.  
  453. struct Dinic {
  454. const long long flow_inf = 1e18;
  455. vector<FlowEdge> edges;
  456. vector<vector<int>> adj;
  457. int n, m = 0;
  458. int s, t;
  459. vector<int> level, ptr;
  460. queue<int> q;
  461.  
  462. Dinic(int n, int s, int t) : n(n), t(t) {
  463. adj.resize(n);
  464. level.resize(n);
  465. ptr.resize(n);
  466. }
  467.  
  468. void add_edge(int v, int u, long long cap) {
  469. edges.emplace_back(v, u, cap);
  470. edges.emplace_back(u, v, 0);
  471. adj[v].push_back(m);
  472. adj[u].push_back(m + 1);
  473. m += 2;
  474. }
  475.  
  476. bool bfs() {
  477. while (!q.empty()) {
  478. int v = q.front();
  479. q.pop();
  480. for (int id : adj[v]) {
  481. if (edges[id].cap - edges[id].flow < 1)
  482. continue;
  483. if (level[edges[id].u] != -1)
  484. continue;
  485. level[edges[id].u] = level[v] + 1;
  486. q.push(edges[id].u);
  487. }
  488. }
  489. return level[t] != -1;
  490. }
  491.  
  492. long long dfs(int v, long long pushed) {
  493. if (pushed == 0)
  494. return 0;
  495. if (v == t)
  496. return pushed;
  497. for (int& cid = ptr[v]; cid < (int)adj[v].size(); cid++) {
  498. int id = adj[v][cid];
  499. int u = edges[id].u;
  500. if (level[v] + 1 != level[u] || edges[id].cap - edges[id].flow < 1)
  501. continue;
  502. long long tr = dfs(u, min(pushed, edges[id].cap - edges[id].flow));
  503. if (tr == 0)
  504. continue;
  505. edges[id].flow += tr;
  506. edges[id ^ 1].flow -= tr;
  507. return tr;
  508. }
  509. return 0;
  510. }
  511.  
  512. long long flow() {
  513. long long f = 0;
  514. while (true) {
  515. fill(level.begin(), level.end(), -1);
  516. level[s] = 0;
  517. q.push(s);
  518. if (!bfs())
  519. break;
  520. fill(ptr.begin(), ptr.end(), 0);
  521. while (long long pushed = dfs(s, flow_inf)) {
  522. f += pushed;
  523. }
  524. }
  525. return f;
  526. }
  527. };
  528. // MST
  529. #define V 5
  530. // A utility function to find the vertex with
  531. // minimum key value, from the set of vertices
  532. // not yet included in MST
  533. int minKey(int key[], bool mstSet[])
  534. {
  535. // Initialize min value
  536. int min = INT_MAX, min_index;
  537.  
  538. for (int v = 0; v < V; v++)
  539. if (mstSet[v] == false && key[v] < min)
  540. min = key[v], min_index = v;
  541.  
  542. return min_index;
  543. }
  544.  
  545. // A utility function to print the
  546. // constructed MST stored in parent[]
  547. void printMST(int parent[], int graph[V][V])
  548. {
  549. cout<<"Edge \tWeight\n";
  550. for (int i = 1; i < V; i++)
  551. cout<<parent[i]<<" - "<<i<<" \t"<<graph[i][parent[i]]<<" \n";
  552. }
  553.  
  554. // Function to construct and print MST for
  555. // a graph represented using adjacency
  556. // matrix representation
  557. void primMST(int graph[V][V])
  558. {
  559. // Array to store constructed MST
  560. int parent[V];
  561.  
  562. // Key values used to pick minimum weight edge in cut
  563. int key[V];
  564.  
  565. // To represent set of vertices included in MST
  566. bool mstSet[V];
  567.  
  568. // Initialize all keys as INFINITE
  569. for (int i = 0; i < V; i++)
  570. key[i] = INT_MAX, mstSet[i] = false;
  571.  
  572. // Always include first 1st vertex in MST.
  573. // Make key 0 so that this vertex is picked as first vertex.
  574. key[0] = 0;
  575. parent[0] = -1; // First node is always root of MST
  576.  
  577. // The MST will have V vertices
  578. for (int count = 0; count < V - 1; count++)
  579. {
  580. // Pick the minimum key vertex from the
  581. // set of vertices not yet included in MST
  582. int u = minKey(key, mstSet);
  583.  
  584. // Add the picked vertex to the MST Set
  585. mstSet[u] = true;
  586.  
  587. // Update key value and parent index of
  588. // the adjacent vertices of the picked vertex.
  589. // Consider only those vertices which are not
  590. // yet included in MST
  591. for (int v = 0; v < V; v++)
  592.  
  593. // graph[u][v] is non zero only for adjacent vertices of m
  594. // mstSet[v] is false for vertices not yet included in MST
  595. // Update the key only if graph[u][v] is smaller than key[v]
  596. if (graph[u][v] && mstSet[v] == false && graph[u][v] < key[v])
  597. parent[v] = u, key[v] = graph[u][v];
  598. }
  599.  
  600. // print the constructed MST
  601. printMST(parent, graph);
  602. }
  603.  
  604. void coder_himadri(){
  605. FIO;
  606. #ifndef ONLINE_JUDGE
  607. freopen("input.txt", "r", stdin);
  608. freopen("out.txt", "w", stdout);
  609. #endif
  610. }
  611.  
  612.  
  613. int n,k,x;
  614. string s;
  615.  
  616.  
  617.  
  618.  
  619. int32_t main(){
  620. FIO;
  621. coder_himadri();
  622.  
  623. {
  624. cin>>n;
  625. for(int i=0; i<n; i++)
  626. {
  627. cin>>s;
  628. k=s.size();
  629. if(k<=10)
  630. cout<<s<<endl;
  631. else
  632. cout<<s[0]<<k-2<<s[k-1]<<endl;
  633.  
  634.  
  635. }
  636.  
  637. }
  638. return 0;
  639. }
Success #stdin #stdout 0.01s 5384KB
stdin
Standard input is empty
stdout
Standard output is empty